{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T02:59:28.155899Z",
     "start_time": "2025-06-10T02:59:28.150835Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import pandas as pd \n",
    "from xgboost.sklearn import XGBClassifier\n",
    "from xgboost import plot_importance\n",
    "import matplotlib.pyplot as plt \n",
    "plt.style.use('ggplot')\n",
    "%matplotlib inline\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "import os \n",
    "os.chdir('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/')"
   ],
   "outputs": [],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 用户数据表"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T02:59:32.828123Z",
     "start_time": "2025-06-10T02:59:32.145153Z"
    }
   },
   "source": [
    "# 导入data_EDA_clean处理过的数据\n",
    "data1 = pd.read_csv('data1_clean.csv',encoding='gbk')"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:13:05.027367Z",
     "start_time": "2025-06-10T03:13:05.014420Z"
    }
   },
   "source": [
    "# 导入变量明细表\n",
    "var_info = pd.read_csv('var_info.csv',encoding='utf-8')"
   ],
   "outputs": [],
   "execution_count": 10
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:13:05.988686Z",
     "start_time": "2025-06-10T03:13:05.981415Z"
    }
   },
   "source": [
    "base_col = list(data1.columns)\n",
    "var_info2 = var_info[var_info.变量名称.isin(base_col)].reset_index(drop=True)\n",
    "var_info2.变量类型.value_counts() "
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "变量类型\n",
       "int64      122\n",
       "float64     14\n",
       "object      11\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 11
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 类别型变量 "
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:05.505341Z",
     "start_time": "2025-06-10T03:16:05.368451Z"
    }
   },
   "source": [
    "# 类别型变量的描述性分析\n",
    "cate_col = list(var_info2[var_info2.变量类型=='object'].变量名称)\n",
    "print(cate_col)\n",
    "# 数值型类别变量的desc\n",
    "data1.loc[:,cate_col].describe().T.assign(nuniq = data1.loc[:,cate_col].apply(lambda x:x.nunique()),\n",
    "                                          missing_pct = data1.loc[:,cate_col].apply(lambda x:(len(x)-x.count())/len(x)))"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['WeblogInfo_19', 'WeblogInfo_20', 'WeblogInfo_21', 'UserInfo_2', 'UserInfo_4', 'UserInfo_19', 'UserInfo_20', 'UserInfo_7', 'UserInfo_8', 'UserInfo_9', 'sample_status']\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "               count unique    top   freq  nuniq  missing_pct\n",
       "WeblogInfo_19  44861      7      I  36353      7     0.097382\n",
       "WeblogInfo_20  36437     38     I5  18476     38     0.266876\n",
       "WeblogInfo_21  44699      4      D  35869      4     0.100642\n",
       "UserInfo_2     49244    329     深圳   1239    329     0.009195\n",
       "UserInfo_4     49300    332     深圳   1398    332     0.008068\n",
       "UserInfo_19    49701     31    山东省   3955     31     0.000000\n",
       "UserInfo_20    49701    307     不详  11876    307     0.000000\n",
       "UserInfo_7     49701     32     不详   6962     32     0.000000\n",
       "UserInfo_8     49701    664     不详   6962    664     0.000000\n",
       "UserInfo_9     49701      7  中国移动   25700      7     0.000000\n",
       "sample_status  49701      2  train  29832      2     0.000000"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>unique</th>\n",
       "      <th>top</th>\n",
       "      <th>freq</th>\n",
       "      <th>nuniq</th>\n",
       "      <th>missing_pct</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_19</th>\n",
       "      <td>44861</td>\n",
       "      <td>7</td>\n",
       "      <td>I</td>\n",
       "      <td>36353</td>\n",
       "      <td>7</td>\n",
       "      <td>0.097382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_20</th>\n",
       "      <td>36437</td>\n",
       "      <td>38</td>\n",
       "      <td>I5</td>\n",
       "      <td>18476</td>\n",
       "      <td>38</td>\n",
       "      <td>0.266876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_21</th>\n",
       "      <td>44699</td>\n",
       "      <td>4</td>\n",
       "      <td>D</td>\n",
       "      <td>35869</td>\n",
       "      <td>4</td>\n",
       "      <td>0.100642</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_2</th>\n",
       "      <td>49244</td>\n",
       "      <td>329</td>\n",
       "      <td>深圳</td>\n",
       "      <td>1239</td>\n",
       "      <td>329</td>\n",
       "      <td>0.009195</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_4</th>\n",
       "      <td>49300</td>\n",
       "      <td>332</td>\n",
       "      <td>深圳</td>\n",
       "      <td>1398</td>\n",
       "      <td>332</td>\n",
       "      <td>0.008068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_19</th>\n",
       "      <td>49701</td>\n",
       "      <td>31</td>\n",
       "      <td>山东省</td>\n",
       "      <td>3955</td>\n",
       "      <td>31</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_20</th>\n",
       "      <td>49701</td>\n",
       "      <td>307</td>\n",
       "      <td>不详</td>\n",
       "      <td>11876</td>\n",
       "      <td>307</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_7</th>\n",
       "      <td>49701</td>\n",
       "      <td>32</td>\n",
       "      <td>不详</td>\n",
       "      <td>6962</td>\n",
       "      <td>32</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_8</th>\n",
       "      <td>49701</td>\n",
       "      <td>664</td>\n",
       "      <td>不详</td>\n",
       "      <td>6962</td>\n",
       "      <td>664</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_9</th>\n",
       "      <td>49701</td>\n",
       "      <td>7</td>\n",
       "      <td>中国移动</td>\n",
       "      <td>25700</td>\n",
       "      <td>7</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sample_status</th>\n",
       "      <td>49701</td>\n",
       "      <td>2</td>\n",
       "      <td>train</td>\n",
       "      <td>29832</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 14
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "UserInfo_2,UserInfo_4,UserInfo_8，UserInfo_20: 城市信息, 需要做降基处理\n",
    "UserInfo_7，UserInfo_19：省份信息\n",
    "UserInfo_9：运营商类型,需要做清洗\n",
    "WeblogInfo_20：微博信息，需要做降基处理"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:09.914374Z",
     "start_time": "2025-06-10T03:16:09.790845Z"
    }
   },
   "source": [
    "# 先对所有字符型变量作去空格处理\n",
    "for col in data1.select_dtypes(include='O').columns:\n",
    "    data1[col] = data1[col].map(lambda x:str(x).strip())"
   ],
   "outputs": [],
   "execution_count": 15
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 省份"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "原数据有两个省份字段，推测一个为用户的户籍地址，另一个为用户居住地址所在省份，由此可衍生的字段为：\n",
    "1.省份二值化，通过违约率将单个省份衍生为二值化特征，分为户籍省份和居住地省份\n",
    "2.户籍省份和居住地省份是否一致，推测不一致的用户大部分为外来打工群体，相对违约率会高一点\n",
    "ps: 计算违约率时要考虑该省份的借款人数，如果人数太少，参考价值不大"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:11.642372Z",
     "start_time": "2025-06-10T03:16:11.637370Z"
    }
   },
   "source": [
    "# 计算各省份违约率\n",
    "def plot_pro_badrate(df,col):\n",
    "    group = df.groupby(col)\n",
    "    df = pd.DataFrame()\n",
    "    df['total'] = group.target.count()\n",
    "    df['bad'] = group.target.sum()\n",
    "    df['badrate'] = df['bad']/df['total']\n",
    "    # 筛选出违约率排名前5的省份\n",
    "    print(df.sort_values('badrate',ascending=False).iloc[:5,:])"
   ],
   "outputs": [],
   "execution_count": 16
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:13.261389Z",
     "start_time": "2025-06-10T03:16:13.249945Z"
    }
   },
   "source": [
    "# 户籍地址\n",
    "plot_pro_badrate(data1,'UserInfo_19')"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             total    bad   badrate\n",
      "UserInfo_19                        \n",
      "天津市            137   17.0  0.124088\n",
      "山东省           2366  256.0  0.108199\n",
      "吉林省            498   47.0  0.094378\n",
      "黑龙江省           813   71.0  0.087331\n",
      "湖南省           1753  149.0  0.084997\n"
     ]
    }
   ],
   "execution_count": 17
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:14.814746Z",
     "start_time": "2025-06-10T03:16:14.772494Z"
    }
   },
   "source": [
    "# 西藏自治区的人数太少，不具有参考价值，剔除后再计算\n",
    "plot_pro_badrate(data1[~(data1.UserInfo_19=='西藏自治区')],'UserInfo_19')"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             total    bad   badrate\n",
      "UserInfo_19                        \n",
      "天津市            137   17.0  0.124088\n",
      "山东省           2366  256.0  0.108199\n",
      "吉林省            498   47.0  0.094378\n",
      "黑龙江省           813   71.0  0.087331\n",
      "湖南省           1753  149.0  0.084997\n"
     ]
    }
   ],
   "execution_count": 18
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:16.168519Z",
     "start_time": "2025-06-10T03:16:16.158684Z"
    }
   },
   "source": [
    "# 居住地址\n",
    "plot_pro_badrate(data1,'UserInfo_7')"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            total    bad   badrate\n",
      "UserInfo_7                        \n",
      "山东           2059  226.0  0.109762\n",
      "天津            183   20.0  0.109290\n",
      "四川           1117  108.0  0.096688\n",
      "湖南           1056  100.0  0.094697\n",
      "海南            164   15.0  0.091463\n"
     ]
    }
   ],
   "execution_count": 19
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:23.585545Z",
     "start_time": "2025-06-10T03:16:17.471548Z"
    }
   },
   "source": [
    "# 户籍省份的二值化衍生\n",
    "data1['is_tianjin_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='天津市' else 0,axis=1)\n",
    "data1['is_shandong_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='山东省' else 0,axis=1)\n",
    "data1['is_jilin_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='吉林省' else 0,axis=1)\n",
    "data1['is_sichuan_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='四川省' else 0,axis=1)\n",
    "data1['is_heilongj_userinfo19'] = data1.apply(lambda x:1 if x.UserInfo_19=='黑龙江省' else 0,axis=1)\n",
    "\n",
    "# 居住地址省份的二值化衍生\n",
    "data1['is_tianjin_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='天津' else 0,axis=1)\n",
    "data1['is_shandong_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='山东' else 0,axis=1)\n",
    "data1['is_sichuan_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='四川' else 0,axis=1)\n",
    "data1['is_hunan_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='湖南' else 0,axis=1)\n",
    "data1['is_jilin_userinfo7'] = data1.apply(lambda x:1 if x.UserInfo_7=='吉林' else 0,axis=1)"
   ],
   "outputs": [],
   "execution_count": 20
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:25.085833Z",
     "start_time": "2025-06-10T03:16:25.078248Z"
    }
   },
   "source": [
    "# 户籍省份和居住地省份不一致衍生\n",
    "data1.UserInfo_19.unique()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['四川省', '福建省', '湖北省', '江西省', '辽宁省', '山东省', '内蒙古自治区', '湖南省', '黑龙江省',\n",
       "       '山西省', '江苏省', '云南省', '浙江省', '广东省', '天津市', '广西壮族自治区', '甘肃省', '贵州省',\n",
       "       '陕西省', '重庆市', '河北省', '青海省', '安徽省', '上海市', '吉林省', '北京市', '河南省',\n",
       "       '宁夏回族自治区', '新疆维吾尔自治区', '海南省', '西藏自治区'], dtype=object)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 21
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:26.361084Z",
     "start_time": "2025-06-10T03:16:26.352380Z"
    }
   },
   "source": [
    "data1.UserInfo_7.unique()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['广东', '浙江', '湖北', '福建', '辽宁', '不详', '内蒙古', '湖南', '黑龙江', '山西', '北京',\n",
       "       '山东', '江苏', '云南', '天津', '广西', '重庆', '江西', '四川', '陕西', '贵州', '河北',\n",
       "       '青海', '甘肃', '安徽', '吉林', '新疆', '海南', '河南', '宁夏', '上海', '西藏'],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 22
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:27.566259Z",
     "start_time": "2025-06-10T03:16:27.545425Z"
    }
   },
   "source": [
    "# 将UserInfo_19改成和居住地址省份相同的格式\n",
    "UserInfo_19_change = []\n",
    "for i in data1.UserInfo_19:\n",
    "    if i=='内蒙古自治区' or i=='黑龙江省':\n",
    "        j = i[:3]\n",
    "    else:\n",
    "        j=i[:2]\n",
    "    UserInfo_19_change.append(j)"
   ],
   "outputs": [],
   "execution_count": 23
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:28.961699Z",
     "start_time": "2025-06-10T03:16:28.909517Z"
    }
   },
   "source": [
    "is_same_province=[]\n",
    "# 判断UserInfo_7和UserInfo_19是否一致\n",
    "for i,j in zip(data1.UserInfo_7,UserInfo_19_change):\n",
    "    if i==j:\n",
    "        a = 1\n",
    "    else:\n",
    "        a = 0\n",
    "    is_same_province.append(a)\n",
    "    \n",
    "data1['is_same_province'] = is_same_province\n",
    "\n",
    "# 删除原有的变量\n",
    "data1 = data1.drop(['UserInfo_19','UserInfo_7'],axis=1)\n",
    "data1.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 156)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 24
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 运营商"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:46.530659Z",
     "start_time": "2025-06-10T03:16:46.442027Z"
    }
   },
   "source": [
    "# 将运营商信息转换为哑变量\n",
    "data1 = data1.replace({'UserInfo_9':{'中国移动':'china_mobile',\n",
    "                                     '中国电信':'china_telecom',\n",
    "                                     '中国联通':'china_unicom',\n",
    "                                     '不详':'operator_unknown'}})\n",
    "oper_dummy = pd.get_dummies(data1.UserInfo_9)\n",
    "data1 = pd.concat([data1,oper_dummy],axis=1)\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['UserInfo_9'],axis=1)\n",
    "data1.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 159)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 25
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  城市"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "原数据中有4个城市信息，推测为用户登录的IP地址城市，衍生的逻辑为：\n",
    "1. 通过xgboost挑选比较重要的城市变量，进行二值化衍生\n",
    "2. 由4个城市特征的非重复项计数可衍生成 登录IP地址的变更次数\n",
    "3. 根据城市的一线/二线/三线进行降基处理，再转化为二值化特征"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:49.003504Z",
     "start_time": "2025-06-10T03:16:48.989626Z"
    }
   },
   "source": [
    "# 计算4个城市特征的非重复项计数，观察是否有数据异常\n",
    "for col in ['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20']:\n",
    "    print('{}:{}'.format(col,data1[col].nunique()))\n",
    "    print('\\t')"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UserInfo_2:330\n",
      "\t\n",
      "UserInfo_4:333\n",
      "\t\n",
      "UserInfo_8:664\n",
      "\t\n",
      "UserInfo_20:307\n",
      "\t\n"
     ]
    }
   ],
   "execution_count": 26
  },
  {
   "cell_type": "code",
   "metadata": {
    "scrolled": true,
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:50.678541Z",
     "start_time": "2025-06-10T03:16:50.672159Z"
    }
   },
   "source": [
    "# UserInfo_8相对其他特征nunique较大，发现有些城市有\"市\"，有些没有，需要做一下清洗\n",
    "print(data1.UserInfo_8.unique()[:50])"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['深圳' '温州' '宜昌' '南平' '辽阳' '不详' '包头' '赤峰' '鄂州' '武汉' '长沙' '漳州' '牡丹江' '太原市'\n",
      " '北京' '忻州' '三明' '临沂' '福州' '泰州市' '大同' '红河' '郴州' '常州' '湖州' '佛山' '天津' '南宁'\n",
      " '聊城' '柳州' '广州市' '太原' '重庆' '杭州' '景德镇' '上饶' '鸡西' '资阳' '成都' '济宁' '滨州' '渭南'\n",
      " '广州' '都匀' '廊坊' '西宁市' '金华' '龙岩' '清远' '兰州']\n"
     ]
    }
   ],
   "execution_count": 27
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:51.913245Z",
     "start_time": "2025-06-10T03:16:51.890627Z"
    }
   },
   "source": [
    "# UserInfo_8清洗处理，处理后非重复项计数减小到400\n",
    "data1['UserInfo_8']=[s[:-1] if s.find('市')>0 else s[:] for s in data1.UserInfo_8] \n",
    "data1.UserInfo_8.nunique()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "400"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 28
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:53.114706Z",
     "start_time": "2025-06-10T03:16:53.050798Z"
    }
   },
   "source": [
    "# 根据xgboost变量重要性的输出吧对城市作二值化衍生\n",
    "data1_temp1 = data1[['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20','target']]\n",
    "area_list=[]\n",
    "# 将四个城市变量都做亚编码处理\n",
    "for col in data1_temp1:\n",
    "    dummy_df = pd.get_dummies(data1_temp1[col])\n",
    "    dummy_df = pd.concat([dummy_df,data1_temp1['target']],axis=1)\n",
    "    area_list.append(dummy_df)\n",
    "\n",
    "df_area1 = area_list[0]\n",
    "df_area2 = area_list[1]\n",
    "df_area3 = area_list[2]\n",
    "df_area4 = area_list[3]"
   ],
   "outputs": [],
   "execution_count": 29
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:16:58.408814Z",
     "start_time": "2025-06-10T03:16:55.361680Z"
    }
   },
   "source": [
    "# 用xgboost建模\n",
    "from xgboost.sklearn import XGBClassifier\n",
    "x_area1 = df_area1[df_area1['target'].notnull()].drop(['target'],axis=1)\n",
    "y_area1 = df_area1[df_area1['target'].notnull()]['target']\n",
    "x_area2 = df_area2[df_area2['target'].notnull()].drop(['target'],axis=1)\n",
    "y_area2 = df_area2[df_area2['target'].notnull()]['target']\n",
    "x_area3 = df_area3[df_area3['target'].notnull()].drop(['target'],axis=1)\n",
    "y_area3 = df_area3[df_area3['target'].notnull()]['target']\n",
    "x_area4 = df_area4[df_area4['target'].notnull()].drop(['target'],axis=1)\n",
    "y_area4 = df_area4[df_area4['target'].notnull()]['target']\n",
    "xg_area1 = XGBClassifier(random_state=0).fit(x_area1,y_area1)\n",
    "xg_area2 = XGBClassifier(random_state=0).fit(x_area2,y_area2)\n",
    "xg_area3 = XGBClassifier(random_state=0).fit(x_area3,y_area3)\n",
    "xg_area4 = XGBClassifier(random_state=0).fit(x_area4,y_area4)"
   ],
   "outputs": [],
   "execution_count": 30
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:00.622559Z",
     "start_time": "2025-06-10T03:16:59.635449Z"
    }
   },
   "source": [
    "# 输出变量的重要性\n",
    "from xgboost import plot_importance\n",
    "plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']\n",
    "fig = plt.figure(figsize=(20,8))\n",
    "ax1 = fig.add_subplot(2,2,1)\n",
    "ax2 = fig.add_subplot(2,2,2)\n",
    "ax3 = fig.add_subplot(2,2,3)\n",
    "ax4 = fig.add_subplot(2,2,4)\n",
    "plot_importance(xg_area1,ax=ax1,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area2,ax=ax2,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area3,ax=ax3,max_num_features=10,height=0.4)\n",
    "plot_importance(xg_area4,ax=ax4,max_num_features=10,height=0.4)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Feature importance'}, xlabel='Importance score', ylabel='Features'>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2000x800 with 4 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABowAAALECAYAAAAy4RJVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde3zO9f/H8ee1XTvY5jAzNseIzXHIMZVDRZT85CtJlKloKYdEVEJEFCV88031lVOolL5JSlLJKRU5zzHGZuY0Ntuu0+8Pt13fru81te2zw7Vdj/vt1i17f96fz/X6vK4Ln5fX9Xl/TA6HwyEAAAAAAAAAAAB4LZ/iDgAAAAAAAAAAAADFi4YRAAAAAAAAAACAl6NhBAAAAAAAAAAA4OVoGAEAAAAAAAAAAHg5GkYAAAAAAAAAAABejoYRAAAAAAAAAACAl6NhBAAAAAAAAAAA4OVoGAEAAAAAAAAAAHg5GkYAAAAAAAAAAABejoYRAKDAvf3222revLn+85//FHcoAAAAAOCRqJsAAJ7GXNwBAICni46Ovu62+vXra/Xq1UUSh91u19WrVxUcHFwkr2dEYmKi0tPTdebMmeIOpUhcuXJFISEhxR0GAAAAUGyom/KOugkA4GlMDofDUdxBAIAni46Olp+fn/r06eO2LSIiQoMHDy70GD7++GO98cYbGjVqlHr16lXor2eU3W5XcnKyIiIiijuUQpWenq7HH39cycnJ+uabb4o7HAAAAKDYUDflHXUTAMDTcIcRAOSCn5+fXnrppWJ7/X379iklJaXYXj+vfHx8Sn3RI0kZGRnasWOHqlWrVtyhAAAAAMWOuilvqJsAAJ6GZxgBACRd+3Yb/h55AgAAALwX9UDukCcAKJloGAFAAbLZbFq0aJF69OihJk2aqE2bNho6dKgOHjzoNnf37t0aO3asbr/9djVu3FgtWrTQ448/rn379jnnrFq1StHR0Vq6dKkkady4cYqOjlZ0dLQSEhIkSbfffruio6N1/vx5t9cYMmSIoqOjtW3bNufYtm3bFB0drSFDhujIkSN66KGH1LhxY02bNs055+LFi3r11VedsbVv316TJk3K8TVy8vLLLys6OlqrVq3K8XWTk5M1atQotWnTRi1bttQzzzzjPPaGDRt0//33q2nTprr55pv10ksvKT093eX4c+bMUXR0tN577z2dPHlSzzzzjNq2bauYmBj16tVLa9asyTGuK1eu6J///Kd69uyp5s2bq2nTprr33nv19ttv6+rVq27zo6Oj1bx5c6WlpWnUqFFq3ry57rvvPmfeb775ZknSqVOnnO/L2LFjnfvn5j2WpISEBEVHR6t79+7KysrSrFmz1KlTJzVu3Fh33323Pv/88xzPJysrS4sXL1afPn3UokULNW3aVN26ddPy5ctd5hl9PwEAAICCRN10DXXTNdRNAOA5WJIOAAqIzWbT0KFD9d1336l69erq1q2bUlJS9O2332rz5s1aunSpGjZs6Jw/aNAgWa1WtW7dWu3atdOBAwf0ww8/6Ndff9WaNWsUERGhG2+8UQ899JB+/vlnxcfH6+abb1adOnUkyfDDQq1Wq4YMGaKIiAj16NFDVatWlSSdOXNGAwYM0B9//OEs3g4cOKBly5Zpy5Yt+vjjjw299uXLl/XQQw+pcuXKuu2227RlyxatWbNGp06d0sMPP6zRo0erXbt26tSpk3788UetWLFCaWlpmjlzptuxTp06pd69e6ty5crq0KGDTp8+rZ9//lnPPPOMLly4oP79+zvnJicn65FHHtHRo0dVq1Ytde3aVTabTdu2bdObb76pb775RosXL87x4bgTJ07Unj17dPfdd8tkMkmSevbsqTNnzujjjz9WcHCwevbsKUlq2rSpc7/cvMd/ZrfbFRcXp+PHj6tVq1Y6ceKEfvvtN40ePVply5ZVp06dnHOvXLmiRx99VDt37lTFihXVsWNH+fr6at++ffrhhx/Ut2/fInk/AQAAgLygbsod6ibqJgAoFg4AwF+KiopyNGvW7G/n/etf/3JERUU5Ro4c6cjMzHSOr1mzxhEVFeV48MEHXeb/85//dFy+fNllbPjw4Y6oqCjH3LlzXcYnTZrkiIqKcnzyySdur9upUydHVFSU49y5c27bBg8e7IiKinJs3brVObZ161ZHVFSUo1GjRo7Jkye77TNo0CBHVFSU44MPPnCO2e12x8SJEx1RUVGON954468TcZ14s183KirKMWfOHOf42bNnHa1bt3bG9Nlnnzm37d+/3xEdHe1o0KCB48KFC87xt956yxEVFeWIjo52zJ8/3+W1169f74iOjnbExMQ4zp8/7xyPjY11REVFOaZMmeKw2WzO8czMTMcTTzzhiIqKcstHVFSUo379+o4+ffo4MjIy3M7z3LlzjqioKEenTp1yzENu3+OTJ086czNkyBCX13r55ZcdUVFRjkceecTlOM8884wjKirK8eSTTzrS0tJcth09etT564J4PwEAAIC/Q91E3UTdBAAlH0vSAUAupKenO2+d//N/2UsHOBwOLVy4UMHBwZoyZYr8/f2d+959992qXbu2fvnlF5db2ePi4ty+odStWzdJ0qFDhwr9nHx8fPTkk0+6jB06dEibNm1SmzZt9PDDDzvHTSaTc+63335r6HVDQ0M1ePBg58+VKlXSXXfdJUlq3Lix/u///s+5rX79+mrUqJFsNpsOHz7sdqzmzZtryJAhLmN33HGH7rjjDmVkZGjDhg2SpPj4eP3000+qVq2aRo8eLR+f//715+/vr/Hjx8vPz0+ffPKJLBaLy/Gyv70WEBCQ53PN63tsMpk0adIkl9caOHCgJLksx3Dy5EmtWbNG4eHhev311xUUFORynNq1aztfo7DfTwAAACAbdRN1E3UTAJRsLEkHALng5+enPn36uI3feOONkqSjR4/q3Llzqly5sl5//XW3ednrPCckJKhixYrO8b179+rnn3/WsWPHlJCQoKNHj0qSMjIyCuM0XNSpU8clFknasWOHpGuF3ssvv+y2j8lk0okTJwy9bt26dV0KQ0nOZR3+vCxBtipVqmjPnj1KS0tz29a2bdscX6Np06Zav369jh8/Lkn69ddfJUm33nqr22tnv36tWrV0+PBhHTt2TFFRUS7bW7Ro8fcndh15eY8jIiJUpUoVl7Fq1arJ19dXqampzrHt27fL4XCoS5cuKlOmzHVfuyjeTwAAACAbddM11E15R90EAJ6BhhEA5IKfn59eeuml626/ePGipGvrPWc/aDUn2Re7KSkpGjlypLZv367AwEBFR0erRo0auummm3T69Gk5HI4CjT8n4eHhbmPZ57F7927t3r07x/2MFmU5rXXt5+cnKef1xbO/NWa32922hYWF/eVrZH/r7cKFC5Lktvb1n4WHh+vw4cO6cuWKy3hgYKDKli173f2uJz/vcU7n7+Pjo4CAAJcH2J49e1aSVLly5b+MoSjeTwAAACAbddN/UTflDnUTAHgWGkYAUACyL7SbNWumFStW/O38qVOnavv27YqLi9PQoUOdF/6bNm3SF198kafXzn6YaGZmptu2P18s/68/Ly+QLfs8Bg8erFGjRuUp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WDRo0CBJ19bpXr16td58880iPx8AAACUXBEREcUdQol1+PBhrVq1Sh999JFiYmIkSXPnzlWnTp20efNmtWvXzjnX39/fuapAtqysLLdiCNesXLlShw8f1jPPPKMqVarker+xY8fq3Xff1ahRozRkyBC1bdtW0rUv2AUEBBRWuAAAACjFqJmM8eS6ySMaRpK0detW2Ww2HTx4UO3atZPZbJbFYlFKSoqqVq3qNv/3339X/fr1ZbFY5O/vr/bt22vChAnOB8A2btxYn376qfbs2VPUpwIAAIASLCkpSQ6Ho7jDKHJms1nh4eGGjhEfHy9JatCggXMsMjJSoaGhzuv8bFWqVHFbRiExMVE1atQwFENpFRsbq/nz52vChAl66623cr1fUFCQhg0bpq+//tr5BT0fHx9lZmbK39+/ECMGAABAaUXNZIwn100e0TCyWq368ssv1ahRI+3fv19vvPGG9u/fL5PJpKCgIMXFxbntU6tWLbVq1UppaWkKDg5WrVq1FB4erp9//tk5p1OnTvrmm2/45hwAAAByzeFweGXxUxAqV64sSTpy5Ijq168v6dozSS9cuOB2V0yLFi30008/6emnn5Z0bYm07du367HHHivaoEsIs9msp556SgkJCflq9HTp0kV33HGH87lFV69epU4CAABAvlAzGePJdZNHNIzWrVunKlWqKDQ0VJ06dZLVatXw4cP/shBauXKlWrVqpc2bN6ts2bKSpNGjR6tSpUrOdf46d+4si8WiDz/8sEjOAwAAAPBmLVq0UKNGjTR27FiNHTtWfn5+ev3111W1alV17NhRjz76qB544AF16dJFAwYM0P3336+5c+eqS5cuWrZsmex2u+67777iPg2PZrPZcj13ypQp2r9/v9u43W6X3W7Xiy++6LatX79+uueeewzFCAAAAOD6PLlu8oiG0ZEjR9S/f3+tWbNGknT77bcrOTlZTz/9tEJCQlzmWq1W1a5dWxMnTnTuGxUVJem/nbls2Y0kAAAAAIXPZDJpwYIFmjp1qp5++mlZrVa1adNGM2bMkNls1tGjR5WcnCxJatiwoWbOnKmZM2fqX//6l2JiYvT++++7Xf/jv5KTkzVmzBi9++67uZqfU0NIkpYtW6bffvtNr732WkGGBwAAACAXPLlu8oiG0eDBg3N8SFOlSpU0b948l7G9e/fqo48+knTtm3EH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xw4NHDhQkmSz2bRz50717dvXq98DPoPwVBUrVnTWROnp6XrmmWecv8/79u2r5cuXS5J+//13ffnllzkeY/369dqyZYtsNptSU1M1Z84cSdeeIZvTUnUAAMAzcc1qDHWTMXz+Si+PaRidPXtWR48elSSlpqbqxIkTslgskqRTp07pwoULOnDggCSpXr16Lvs2btxY//rXv4o2YAAAAA/k4+Oj+++/X4sXL1alSpUUGRmp999/X9WrV1fr1q01ZswYde/eXe3bt1evXr0UFxenDz74QO3bt9dnn30mh8Ohrl27FvdpAMjBlStXNHbsWL355pv52r9u3bq69dZb1bBhQ2VkZOibb77RvffeK0mKj49XcHBwAUYLAADguaibgJx5RMNo27Zt+uKLL5w/nz17VllZWc4G0pUrV5Senq6ffvpJkvTTTz+pV69ezvl2u935MFcAAABv17dvX2VkZGju3LlKS0tT8+bNNW3aNEnSiRMndO7cOUnXvoQzfvx4vfPOO1q6dKkaNGigGTNmKCgoqDjDB3Adhw8flr+/v8zma2Xc66+/7vy13W7X448/LkmyWq2Kjo522//22293/jowMNDZLPr8889Vq1YtRUVFFfYpAAAAeAzqJsCdRzSM2rRpozZt2ki6Vtxs2bJF69ev15133qn169dryJAhql+/vo4ePaply5bp4Ycf1uXLl2Wz2fTKK68oJSVFMTExBR5XwLAJ8s1IL/Djln4mmc2+slptkrg1Me/InzHkzxjyZwz5M8Yk35ByxR1EqWAymRQbG6vY2Fi3bdlLVmXr0KGDOnToUFShATDgyJEjLqstPPvssy5L0i1YsEBSzkvSrVixQps2bcrxuKmpqfL391dgYKA6derk8uW8v0PNZATXDcaQP2PInzHkzxjyZwx1U0GhbgLceUTDKCMjQ/v379cvv/yinTt3qmzZspowYYL8/f3l7++vlStXyuFwKDMzU3369FHNmjW1d+9e+fr66u6775bNZlNMTIwuXrxYoHFZy4fKEhRSoMf0BiaTSeGRkUpMTGQty3wgf8aQP2PInzHkz5js/KV52UNDASC39u3bp3bt2uVr3wceeEAPPPCAXnnlFbVq1UpdunRxbps3b54aNWqkjh075vm41Ez5x3WDMeTPGPJnDPkzhvwZQ90EoDB5RMNow4YNOnjwoG655RY1bdpUS5Ys0dy5c3Xs2DHVqFFDzz//vH766SetXbtWn376qQ4cOCB/f39JUvPmzV2Old1U+l/h4eFFci4AAAAAUNAsFosOHjzofNiyJM2YMcNlSbpHH31U0rVVGxo0aJDjceLi4jR79mzVq1dPtWvXlnTtDqPs4wAAAADwXh5RFdx99926++67JUmHDh1Sy5Yt1aZNG9WtW1c+Pj6S/nvb3+nTp7Vv3z7n+P8KCAjQ4sWLXcaOHDmiWbNmFe5JAAAAAEAhuXTpkqKiolStWjVJ1x7U/Nxzz6lhw4Zuc3Naki5bxYoVNWnSJO3evVv9+vWTn5+fQkND1bhx40KNHwAAAIDnMzlK6L2fVqtVWVlZhfpwsbNnz8pisRTa8Usrk8mkSG4tzjfyZwz5M4b8GUP+jCF/xpA/47w9h35+ftyV72XsdrskXffLeLlBzZR/3v5njlHkzxjyZwz5M4b8GUP+jCF/xnh7/ryhZvKIO4zyw2w2s2wCAAAAAOSTkUYRAAAAgNKHCgEAAAAAAAAAAMDL0TACAAAAAAAAAADwcjSMAAAAAAAAAAAAvBwNIwAAAAAAAAAAAC9HwwgAAAAAAAAAAMDL0TACAAAAAAAAAADwcjSMAAAAAAAAAAAAvBwNIwAAAAAAAAAAAC9nLu4AAAAAUPAuXryo+fPna8uWLcrIyFCrVq00ZcoUt3m7du3SvHnzdPz4cVWtWlVPPvmkWrduXQwRAwAAAEDRom4CXJkcDoejuIPIjytXruj8+fOqWbOmy3hWVpbS09Od/125ckWpqamqUKGCYmJi8vQaFw7Hy5qRXpBhewmTzGZfWa02SSXy41XMyJ8x5M8Y8mcM+TPGpIAKoUrz9VMJvTwpViaTSZGRkUpMTFRaWpri4uJUuXJl9e/fX8HBwUpISFDHjh1d9klMTNSgQYPUs2dPde7cWatXr9a6deu0cOFCRUREFM+JFKM/59AbP4N+fn4KDw8v7jCQD7/99ps++OADvf7665o8ebIefvhh3XjjjS5zBg4cqHfeeUf+/v4F+trUTEZw3WAM+TOG/BlD/owhf8ZQNxlB3WQMNVPpr5k85g6j9PT0XH/ITCaTDh48qDlz5mjQoEEym816//33ZTKZ5O/vr4CAADkcDlWpUkUhISGy2+2qV69enhtGmW9NkuXIwfycDgAAyAfzzIVS+bDiDqPEW7ZsmRwOh6ZOnSo/Pz9JUt26dd3mrVq1StWqVdOQIUMkScOGDdPmzZu1du1axcbGFmnMAPIv+/e52WxWy5YtNXHiRI0ePfq69U9WVpaSkpK0detWrV692rn/1atXNXnyZEVFReX6tamZAAAoetRNBYO6CXDnMQ2jxx9/XBaLJVdz/fz8tHTpUo0cOVKvv/66Jk2apNatW6tr166qWbOmfvzxR/34448aO3asHA6HXnnlFV24cKGQzwAAAMAzrFu3Tv369XMWPdezc+dOl2UUfH19FRMTo3379hV2iAAKkL+/v2w2myTp3nvvVfny5VW1alVt2rRJH3zwgaRrzaChQ4dKkjp27KjTp0+rVq1a+r//+z/16dNHFy9e1PDhwxUZGVls5wEAAFCUqJsAdx7TMFq6dKnb2MyZM1WjRg316dMnx32aNm2qWbNmKTw8XBEREVq6dKnGjRunmjVrKiUlRampqdqwYYOuXLmi3r17F/YpAAAAFLszZ84oJSVFwcHBGjFihI4dO6ZatWpp6NChio6OdpmbmJjotoRClSpVdOTIkaIMGUAubdy4Uf/85z+vu/1/66bu3btrwYIFkq4tSTdv3jwlJydrypQpevXVV/X11187527YsEGtW7dW2bJlCyd4AAAAD0LdBOTMYxpGebV9+3bVrl3buWZg165dVblyZb3zzjtKTEzUtGnTFBAQoNq1a6t169YFvlY3AAAoHCaTqbhDKJGy83b+/HlJ0sqVKzVgwACFh4dryZIlGjNmjJYsWaJy5co597l69arKlCnjkvPAwEBZLBavfB+yz9kbzx0lR9OmTfXCCy+4jJ05c0Zjx47Vv//977/cNyMjQzNnztTDDz+sChUqOMftdru+/fZbPfPMM4URMgAAKARcs+YPdZMx1EylX4ltGCUlJWnBggUaPXq0oqKidP78eX3zzTeqX7++Hn30UTkcDq1fv14rVqzQgAEDVLVq1eIOGQAA5IK3PTS0oJUvX16SNHjwYPXs2VOS1KpVK7Vr10779+93jknXlrEKCgpyWYLK399fISEhXr0sFZ9BlDRlypTR1atX5XA4ZDKZtG/fPmVlZWnFihVKSUmRdK2of+yxx1SuXDn9+9//1r///W/dcccd8vHx0datW1WuXDndeOONxXwmAAAgt7hmNYa6yRg+f6WXxzSM5s2bp++//95tfNu2bfr4449dxm6//XY98cQT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MuWu+x87doyNGzdaP/v5+WXp/M7OzkDqA3Vr1qyhX79+NucXERERERH5J4Mln8z9TEpKwtXVNdP9w8PDKV269H2MCKKjo0lOTr6v53gQGQwGAjW1ONs0fjmj8csZjV/OaPxyRuOXMxq/nHP0MXRxcbEuXya5w2w2YzabMzUr6H7HkdE7j3KDcqbsc/S/c3JK45czGr+c0fjljMYvZzR+OaPxyxlHHz9HyJnyxQwjIEvFIuC+F4tERERERERywsnJ6b4VarIah4iIiIiIyL9R5iAiIiIiIiIiIiIiIuLgVDASERERERERERERERFxcCoYiYiIiIiIiIiIiIiIODgVjERERERERERERERERBycCkYiIiIiIiIiIiIiIiIOTgUjERERERERERERERERB6eCkYiIiIiIiIiIiIiIiINTwUhERERERERERERERMTBqWAkIiIiIiIiIiIiIiLi4FQwEhERERERERERERERcXAqGImIiIiIiIiIiIiIiDg4FYxEREREREREREREREQcnApGIiIiIiIiIiIiIiIiDk4FIxEREREREREREREREQdnzOsA8jOjUcOTExq/nNH45YzGL2c0fjmj8csZjV/OaPxyzlHH0FG/t+SMrpuc0xjmjMYvZzR+OaPxyxmNX85o/HJG45czjjp+jvC9DRaLxZLXQYiIiIiIiIiIiIiIiEje0ZJ0IiIiIiIiIiIiIiIiDk4FIxEREREREREREREREQengpGIiIiIiIiIiIiIiIiDU8FIRERERERERERERETEwalgJCIiIiIiIiIiIiIi4uBUMBIREREREREREREREXFwKhiJiIiIiIiIiIiIiIg4OBWMREREREREREREREREHJwKRiIiIiIiIiIiIiIiIg5OBSMREREREREREREREREHZ8zrAPIbi8XC6tWr2bp1K3FxcQQFBfHGG2/g7e2d16EVGBcuXODzzz+nd+/eVKtWLa/DKVD+/PNPvvrqK06ePImHhwePPPIIPXv2pHDhwnkdWoGwd+9e1qxZQ2RkJIULF+app57ihRdewGAw5HVoBcrOnTsJCQlh4MCBNG/ePK/DKRC2bdvG3Llzbdqefvpp+vTpk0cRFUwxMTF89dVX/PbbbyQmJlKnTh1GjhyZ12Hle8eOHWPSpEkZbtOf48yJj4/nyy+/ZP/+/aSkpPDwww/Tu3dvfH19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u3teh5ev3fl00p18fHzuuk1sLVy4kLp16+Lj48PRo0dZv349Xbp00X9iZJKTkxPPPfcc33zzDb6+vpQoUYIVK1YQGBjII488ktfhFRjHjh2jSJEilCxZMq9DKVCqVq1KhQoV+Oyzz+jVq5d1Le5ixYpRt27dvA5PJN9RziR5STlTzilvyj7lTTmnvClnlDflDuVN2aO8yXGoYPQPL730EklJSXz00Uc4OTnRrFkzevbsmddhiQO4ceMGAB9++GG6ba+99hpt2rSxc0QFi6urKyaTiU8//ZS4uDj8/f1p06YN7dq1y+vQxAEkJCQwe/ZskpOTCQwM5I033qB58+Z5HVaB8vzzz5OUlMSiRYuIi4ujVq1ajBo1CqNRtyqZFRYWphdWZ4PBYGDMmDF8+eWXzJo1i5SUFGrWrMnAgQP1H2cid6GcSfKKcqacU94keUl5U84pb8o55U3Zo7zJcRgsFoslr4MQERERERERERERERGRvKM5nyIiIiIiIiIiIiIiIg5OBSMREREREREREREREREHp4KRiIiIiIiIiIiIiIiIg1PBSERERERERERERERExMGpYCQiIiIiIiIiIiIiIuLgVDASERERERERERERERFxcCoYiYiIiIiIiIiIiIiIODgVjERERERERERERERERBycCkYiIiIiIiIiIiIiIiIOTgUjERHJdZ9//jmPPPIIGzduzOtQRERERERE8iXlTSIikt+oYCQi8i+qVq1611/PP/98jo69Y8cOunTpwrFjx/61r9ls5vbt2zk63/0QFRXFt99+a9MWERFBXFwcly9fzqOo7OvWrVt5HYKIiIiISJ5S3nRvypuUN4mIFATGvA5ARKQgcHFxoUuXLunaAwIC7HL+1atX89FHHzF8+HA6depkl3Nm1tdff83OnTtp27attW3ixIkMGDDAbuOTV+Li4ujbty9RUVH8+OOPeR2OiIiIiEieUt50d8qblDeJiBQEKhiJiGSCi4sL48ePz7PzHz9+nCtXruTZ+f/JbDbj5HT3SapOTk4PfNIDkJCQwIEDByhVqlS2j2GxWDAYDLkYlYiIiIhI3lDeZEt5UyrlTSIiBYcKRiIi+czEiROJjo5mxIgRLFy4kLCwMKKiooDUhGPZsmXs2LGDpKQkatSoQd++ffH19QXg2LFjTJo0iQEDBpCUlMSmTZuIjo7G39+f9u3b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6wBERB4URYsWZdWqVbz66qu4urqybds2Nm3aRHx8PMHBwXTv3t3ad/jw4fznP//B19eXH374gYsXLzJ58mTrU2X/9PDDDzNx4kRKlizJTz/9xNmzZ63T6atUqcLChQupW7cukZGRxMTEUKxYMZYuXWpdTzorHn30Ub7++mueffZZrl27xqZNm9i+fTt+fn68//771K5dO3sDdB+0bNmSOXPmEBsby4YNG/j7779p27YtX3/9tfXptDRly5Zl7dq1vPbaawBs3LiR3bt3U7p0ad5//30++eQT69NzWfHee+/xxBNPEB0dzffff299Yi2rP+OsqlSpEmvXrqVnz54YDAa+/fZb9u3bR5kyZXjppZes/QrSz1NEREREHnzKm+xPeZPyJhGRzDJYMlrYVURECqRjx44xadIkBgwYYH2x6IMobWmFkSNH0qdPn7wOR0REREREChDlTSIiIhnTknQiIg+QmjVrWtf2FhERERERkfSUN4mIiGRMS9KJiIiIiIiIiIiIiIg4OBWMREREREREREREREREHJwKRiIiIiIiIiIiIiIiIg7OYLFYLHkdhIiIiIiIiIiIiIiIiOQdzTASERERERERERERERFxcCoYiYiIiIiIiIiIiIiIODgVjERERERERERERERERBycMa8DyM+uX7+OyWTK6zCkAPH39yc6Ojqvw5ACSNeOZIeuG8kOXTdyN0ajEV9f37wOQwoY5Uz2o7+/7UdjbV8ab/vRWNuXxtt+NNb25cjj7Qg5kwpG92AymUhOTs7rMKSAMBgMQOp1Y7FY8jgaKUh07Uh26LqR7NB1IyK5TTmTfejvb/vRWNuXxtt+NNb2pfG2H421fWm8H3xakk5ERERERERERERERMTBqWAkIiIiIiIiIiIiIiLi4FQwEhERERERERERERERcXAqGImIiIiIiIiIiIiIiDg4FYxEREREREREREREREQcnApGIiIiIiIiIiIiIiIiDk4FIxEREREREREREREREQengpGIiIiIiIiIiIiIiIiDU8FIRERERERERERERETEwalgJCIiIiIiIiIiIiIi4uBUMBIREREREREREREREXFwKhiJiIiIiIiIiIiIiIg4OBWMREREREREREREREREHJwKRiIiIiIiIiIiIiIiIg5OBSMREREREREREREREREHp4KRiIiIiIiIiIiIiIiIg1PBSEREREREMiU2NpZRo0bx6KOPUrduXcaOHUt8fHyGfX/99Vc6depE7dq1ee655/j555/tHG3+FhcXR0JCAgAmk4mYmJg8jkhERERERPKb/fv3U7Vq1Qx/rVu3Ll3/nOZhBovFYsml2HPdrVu3KFSo0D37XLhwgR9++IF+/frZtHfr1o0VK1bk6PzXz57GlBCXo2OIIzFgNDpjMqUA+faPleRLunYkO3TdSHbouvlXHl4ke3jldRR5wsXFBX9//3v26d+/P+Hh4YwfP57Y2FjGjx9P8+bNef/99236/fXXX7Rv357u3bvTvn17li9fztq1a9m0aROlS5e+n1+jwFi8eDF+fn4899xznDt3jkWLFjF58uR0/YKDg5kwYQKenp7MnDmT/v37ExAQkKNzx8bGUrhw4RwdI41yJnvR39/2o7G2L423/Wis7UvjbT8aa/sy4Objy21nF/JxWeG+yUzOlNsSEhK4fPmyTVtoaChTp05l27Zt+Pj4WNtzIw8z5mbwuclkMjFixAheeOEFWrZsmWEfi8XCggUL8PPzuy8xJM6eRPK5U/fl2CIiIiKS/7hPXwAOWjD6N2fPnmXbtm18/fXXBAUFAXD79m1GjRrFyJEjbRKVJUuWULZsWUaMGAHAO++8w7Zt21izZg2DBg3Ki/DzjevXr3Pz5k1iYmIwGAxcuHCBiIgIEhMTuXDhAq6urpQsWTLdfp6enjg5OTFhwgTeffddZs+ezZkzZzI8R8uWLdM9UJfmwIEDzJ8/n48//hhPT88cfx/lTCIiIiKOxThrERS5P/8fL+m5u7tTrlw5m7YxY8bQs2dPmxwMcicPyzcFo5SUFJvPBoOBF198kfDw8HTbAJydndm8eTOXL19mxIgRvPvuu1y7ds263Ww2M2TIEJt93n77bQIDA+9L/CIiIiIiD7KzZ88CUL16dWtbgwYNMJlMHD9+nMaNG1vb9+/fT7NmzayfjUYj9evX5/Dhw/YLOJ86efIkv//+O+fPn8fV1ZWYmBhiY2O5fv06mzZtws/PDycnJ5ydnXnhhRes+zk5OTF48GAmT56Mu7s7kyZNwmw2pzv+mjVrrMvbJScnp3vys3bt2vj5+XH48GHq1auXbn+j0YiTk1YuFxERERHJj/bt28fx48cJCQlJty038rB8UTCKjIy8Z4Vr06ZN6doGDhzI0qVLGTVqFEWKFGH8+PE227t168bHH3+c26GKiIiIiDiktKfXIiIiKFu2LJC6hDTA1atXbfr+9ddf6ZY8CAwM5OTJk/c/0HyuUaNGNGrUiG3btuHt7c2jjz5KZGQk27Zto3v37gCsWrUq3X7r1q2jefPmTJ06FVdX17se/85iz5AhQ4iOjs6w30cffZRh+4QJE6hZs2ZWvpKIiIiIiNjJggULeP7559PNLoLcycPyRcEoTUaJ0T/dvn2b3r178/XXX9OrVy9q1arF3r17CQ8P56effsLT05Po6GhKlSrFK6+8go+PD8nJyTz88MN3XZZBRERERCSVAYPBkNdB5Et16tQhICCAqVOn8v7772M2m5k6dSqQOvv/TnFxcbi7u9u0ubu7k5SUZLd486vTp0/z5ZdfWj+vXbvW+vuxY8fSvHnzDPf78ccfqV27NkWLFs30uTJ66hBS34s0bNgwHnrooUwfS0REREQkjXKmvHHx4kX27NnDunXrMtyeG3lYvigYubq6UqNGjUz1dXZ2pkaNGgQHB+Pv78/WrVv5448/KFmyJC+88AINGzZk+vTpTJkyhWnTpvHqq69y8eJFDh06dH+/hIiIiIgUeEajM/5awjhDHh4ezJkzh2HDhtGwYUNcXV3p27cvP//8c7oihqurK8nJyTZtSUlJ6ZIXR1SyZEm6d+/OmjVrqFy5MrVr1+bGjRssWrSIIUOGUKxYMXbu3Jlr55syZUqGS1CMHj06Xdunn35K8eLFc+3cIiIiIvJgCggIyOsQHNKKFSsICgqiWrVqGW7PjTwsXxSMli9fzvHjx+nSpUum9/nmm2/o1q0b69evZ/r06Xz77bd88803fPfdd0RHRzN8+HCuXLnC1KlTrTOMRERERETuxWRKISIiIq/DyBNGoxF/f/979gkKCmLr1q1cvnyZQoUKce7cOT7//HOqVq1q069EiRJERkbatEVERFCmTJlcj7ugKVSoEDVr1mTr1q2ULl2amjVrEhUVhaur631bCm7w4ME0adLE+jmjGUZ9+vS5L+cWERERkQdPZGRkundlOoLM5Ez305YtW+jWrdtdt+dGHpYvCkZ9+vShZ8+e6doPHTrE6tWree+999JtMxqNfPjhh5jNZjw9PfHx8aF37940bNgwXd8//viD06dP35fYRURERORBYnHIxCerSpQoAaQ++NW4cWN8fX1ttterV489e/bw5ptvApCSkkJoaCivv/663WPNb2JiYkhISCA+Pp7Y2FiioqK4du0aKSkpREVFpVveT0REREQkv7FYlDfZ24kTJwgPD6dly5Z37ZMbeVi+KBi5u7tnOC3K3d0dJycnvL2902373//+h6enJwAXLlxg48aNACxduvSu5ylVqhSPPfZYLkUtIiIiIuJYNm7cSLly5XBxcWHjxo18//33rFixArPZTN++fenatSutW7emZ8+edO7cmU8//ZTWrVuzbNkyzGYzHTt2zOuvkOeWL19OaGgocXFxnDhxgtWrV2M2m4mLi2P06NH4+vrSoEGDvA5TRERERETykf379+Pn50eFChWsbfcjD8sXBaPssFgs9OzZk4kTJ1K+fHnmzJlj3fbHH3+QnJzMI488kocRioiIiIg8WEJDQ5kwYQIWi4U6derw1VdfUbVqVZKSkggLCyMqKgqAGjVqMGvWLGbNmsW8efMICgpi4cKFFCpUKI+/Qd574403eOONN3jrrbd44403qFy5MlFRUUyaNImQkBAAVq1alcdRioiIiIhIfnLs2DGqV69u02YymXI9DyuwBaPXX3+dGzduWD9v2bKFcuXKERoaSosWLZg+fTozZ87E09OTXbt28ffff/PSSy9l6RxugybgnBCXy5HLg8uA0eiMyZQCaEqmZIWuHckOXTeSHbpu/pWHV15HkK9NnjyZyZMnp2t3dXVl+/btNm1t2rShTZs29gqtQElMTOTy5csEBgZmuL1GjRo4OTnd9zjMZjNOTk5ER0cTFxeHq6trlo+hnMle9Pe3/Wis7UvjbT8aa/vSeNuPxtq+DDgXSr8amNx/M2fOTNd2P/KwfF0wslgsGAyGf+0XHx/PN998w8iRIzl+/Di9evWiRYsWhIeHs2vXLqpXr862bdto1aoVxYoVy/T5TUV8SfbUU5CSOQaDAf/AQCIiIrSGp2SJrh3JDl03kh26bkTyh19//ZXy5cvf9Um/WrVq5ej4mcmhAFauXMmGDRswm80EBQXh4+OT5XMpZ7IP/f1tPxpr+9J424/G2r403vajsbavtPG+HRGR16HIfZLvCkZhYWE4OTnh4uLCr7/+mqmkZePGjTRq1IjChQsTGxuL2Wymc+fOpKSkMHfuXFq0aEG7du24dOlSlgpGIiIiIiIiuSk2Npbly5fz6quv3rVPQkICTk5OJCUlERsbi9F477QtNjYWSE3gz507Z7Ou+dixY++6X+fOnWnXrh1OTk7W98OKiIiIiIjjyncFozVr1hAaGgpAkSJFePPNN/91n6ZNm+Lp6Ym3tzcBAQH06dMHo9FIYmIilStXpmLFilSqVOl+hy4iIiIiInJPP/74I9WrV6d+/fp37fPbb7/xySefYDAYePjhhylatOg9j7lx40bWrVsHQKlSpXjttdcyFYvRaNR7pURERERExMpgyYdz9SwWCxaLxS7rdt9LdHQ0ycnJeRqDFBwGg4FATYGVbNC1I9mh60ayQ9eN3IuLiwv+/v55HcYDz2w2Yzab7zlryGw2k5SUhLOzMy4uLlk6tr1zKOVM9qG/v+1HY21fGm/70Vjbl8bbfjTW9uXo4+0IOVO+m2EEqRdeZtfdFhERERERKSicnJz+tajj5OSEu7t7to4tIiIiIiKSXcooREREREREREREREREHJwKRiIiIiIiIiIiIiIiIg5OBSMREREREREREREREREHp4KRiIiIiIiIiIiIiIiIg1PBSERERERERERERERExMGpYCQiIiIiIiIiIiIiIuLgVDASERERERERERERERFxcCoYiYiIiIiIiIiIiIiIODgVjERERERE7hAXF8cHH3xA+/btefbZZ5k4cSJXr17NsO/hw4fp168frVu35tVXXyU0NNTO0YqIiIiIiMiDav/+/VStWjXDX+vWrUvX/9dff6VTp07Url2b5557jp9//jlL58s3BaOzZ8/eddvw4cM5duxYhtuuXbtGRESETdvbb7/Nrl27cjU+EREREXEMs2fP5siRI0ycOJEZM2Zw+fJlJk+enK5fREQEo0aNol69esydO5c6deowfvx4IiMj8yBqERERERERedDUqVOHH374webXe++9h5eXFy1atLDp+9dff9GvXz8aNWrE6tWrqV+/PgMHDiQ8PDzT5zPmcvzZEh8fz7Rp02jRogU9evTI0r5nzpxh7ty5dOrUieeeew4nJycsFgtOTjmvhRlvXoeEuBwfRxyFges3r2I0pQCWvA5GChRdO5Idum4kOwzEpCSDs0teB5KvnTx5kg4dOlC3bl0AevTowXvvvZeu35o1ayhVqhRvvPEGAIMGDWLv3r1899139O7d264xS8H16quvMmPGDIoXLw7AhQsXmDZtGnPnzrXpFxERQWBgoPVzcHAw7777Ln5+flk+Z2xs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JUto2rQpAwcOxNv7/5b06Ny5M9OmTcNkMgGpBaESJUrQqFEjDAaDtRCUtmTdzz//zLVr13jmmWcIDQ3l008/xdnZmTfffDNTsRiNxiy9AFdERERERB5s+aJgBGRrvWwREREREZGCpGnTptStW5eAgIB029q2bUvbtm0z3C8pKSldW7NmzahTpw6urq40bdqUxo0bA9jMMMpISEhINiIXEREREZEHXb4pGImIiIiIiDzovL29bWYVZVZGD9g5OTnZvHfo3wpFIiIiIiIi96KMQkRERERERERERERExMGpYCQiIiIiIiIiIiIiIuLgVDASERERERERERERERFxcCoYiYiIiIiIiIiIiIiIODgVjERERERERERERERERBycCkYiIiIiIiIiIiIiIiIOTgUjERERERERERERERERB6eCkYiIiIiIiIiIiIiIiIMz5nUAIiIiImJfBw8eZOjQoRluGz16NK1bt7ZpO3z4MCEhIVy4cIGSJUsyYMAAGjRoYI9QRURERERERBzW/v376dWrV4bbpk+fTocOHWzafv31V6ZOncqZM2coW7Yso0aNolmzZpk+n8FisVhyEnBuiYyMJCAgwPr5xIkTuLm5UbFiRaKioggLC6Nhw4YkJSWxY8cOWrZsyZIlS/Dx8aF9+/Y2x7px4wZjx45l9uzZvPvuu7Rr145HH300yzFdP3saU0Jcjr+bOAoDRqMzJlMKkC/+WEmBoWtHskPXzT15eJHs4ZXXUeQ7BoOBwMBALly4QHR0tM22Q4cO8dlnn7F8+XK8vb2t7REREbz22mt06NCBVq1asX79erZs2cKiRYts7t2k4HNxccHf3z+vw3AIZ8+epVKlShluGz58OK+99ho1a9ZMt+3atWskJiYSGBhobXv77bd57rnnaN68eabPHxsbS+HChbMeeAaUM9mL/t23H421fWm87UdjbV8ab/vRWNuXATcfX247u5BPygp2lRc5U0JCApcvX7ZpCw0NZerUqWzbtg0fHx9r+19//UX79u3p3r077du3Z/ny5axdu5ZNmzZRunTpTJ0vX8wwioyMZMyYMXTt2pWnn36a6OhoPvnkE/r160dCQgIzZszg0Ucf5bHHHmPOnDkkJyfz5JNP/utxnZ2defnll/nll1+yVTBKnD2J5HOnsvOVREREJA+5T18AKhjdlZubG6VKlbJpmzFjBh07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Y0RHR5OcnJxbIckDzmAwEKgpsJINunYkO3TdSHboupF7cXFxwd/fP6/DcAhJSUnZel9QfqScyT7097f9aKztS+NtPxpr+9J424/G2r4cfbwdIWfKFzOM7oecFIpERERERETulwelWCQiIiIiIg8WVVVEREREREREREREREQcnApGIiIiIiIiIiIiIiIiDk4FIxEREREREREREREREQengpGIiIiIiIiIiIiIiIiDU8FIRERERERERERERETEwalgJCIiIiIiIiIiIiIi4uBUMBIREREREREREREREXFwKhiJiIiIiIiIiIiIiIg4OGNeByAiIiIi9nXw4EGGDh2a4bbRo0fTunVrm7bDhw8TEhLChQsXKFmyJAMGDKBBgwb2CFVERERERETEYe3fv59evXpluG369Ol06NDBpu3XX39l6tSpnDlzhrJlyzJq1CiaNWuW6fMZLBaLJScB56a5c+dSo0YNmjdvnul9Tpw4wdKlS3nvvffu2ickJIQyZcrQvn37LMVz/expTAlxWdpHHJkBo9EZkykFyDd/rKRA0LUj2aHr5p48vEj28MrrKPIdg8FAYGAgFy5cIDo62mbboUOH+Oyzz1i+fDne3t7W9oiICF577TU6dOhAq1atWL9+PVu2bGHRokUEBATY+yvIfeTi4oK/v39eh0FCQgIrVqygR48eGI22z7f179+f4OBgatWqdc9jdOnSheXLl+Ps7Jypc6akpPDzzz/TtGlT6znNZjPh4eGULVvW2u/48ePUqFHDZr+rV69SvHhxa9uNGzewWCz4+vpm6txms5kPPviAXr163fPP1LVr1/D19cVgMNi0X7p0ifDw8H8t4vbs2ZN58+bh6emZ4fYdO3bwyy+/MGrUqEzFnUY5k73o33370Vjbl8bbfjTW9qXxth+NtX0ZcPPx5bazC/morGA3eZEzJSQkcPnyZZu20NBQpk6dyrZt2/Dx8bG2//XXX7Rv357u3bvTvn17li9fztq1a9m0aROlS5fO1Pny7QyjadOmcebMGZKTkzGZTHh4eNhsf+2112jSpAlms5nExESbba+++iozZsywSdyyI3H2JJLPncrRMURERMT+3KcvABWM7srNzY1SpUrZtM2YMYOOHTvaFIsA1qxZQ6lSpXjjjTcAGDRoEHv37uW7776jd+/edotZHhw3b94kOjqauLg44uPjuX37Njdu3LD+GjhwIGfOnGHVqlV0797dZl+LxZLpItCdjh07xuTJk3F3dwfAZDLRqFEjgoODAfjpp5/4+eefadGihXWfK1eu8O677/L2229TuXJlDhw4wLx58/jwww8pXLgwAGFhYXzyySfMmDHDWoj55ptvcHNzo0ePHpmO7dy5cxQrVuye/f773/+SnJzMwIEDbZLCxYsX4+/v/68Fo8TERJukfsaMGTRo0MDmO2eHciYRERERx2KctQiK+OV1GA7D3d2dcuXK2bSNGTOGnj172uQFAEuWLKFs2bKMGDECgHfeeYdt27axZs0aBg0alKnz5duCUdqTbZs3byY8PJx+/frlcUQiIiIiD6bffvuNM2fOMHny5HTbDh06ZPMf0c7OzgQFBXH8+HF7higFVEhICDt37rR+rl27Ni1btmTdunV4enri4eHBwYMHadGiBSVKlKBChQqkpKTQp08fxo0bR5MmTShTpoy10GE2m3FyciIlJcV6TIPBgJOTE+PHj+fvv/+2tqflD6VKlaJr165Uq1aNiRMnAqmzaY4dOwakzghavXo1Li4u9O/fn6tXrzJ37lyKFy9Oz5492bhxI2+88QZffPEFgwcPthaLACpXrkzjxo05f/48NWvWJCEhgV27dlGtWjXmzp1rMxbOzs707dsXgD59+pCQkGD9TmazmVdeeSXd+D311FO89tprAAwdOpT58+czZswYPvroI9zc3Pjjjz84f/68Nfn7/fffcXJy4uGHH876D0tERERERPK9ffv2cfz4cUJCQtJt279/v83yc0ajkfr163P48OFMHz9fFIy2bdvG6dOnOXnyJJcvX+b48eP06dMHFxcXoqKi/vVpOxERERHJvpUrV9KqVat0s4sgdUm6fy6TVaJECc6dO2ev8KQACw4OJjg4mKioKMaNG0erVq1o2LAhjRo1svZ59dVX6dixo83qABUrVqRPnz4UKVKETz/9lN27d1u3jRs3zuYcDRo04K233uLdd9+1tnXp0oX58+dbZyOlFYf+yWQy8eGHH/LUU0/RtWtXVq9ezZUrVyhatCifffYZUVFRWCwWxo4dS1xcHKtXr2b16tUEBwczYsQI4uPjcXd354cffgDgmWeeoXr16jZL26VxcnKy/j4pKYmPPvronisirFq1ihs3blg/u7q6MnDgQC5evIibmxvx8fHMmzePvn37Wmc3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JD4+nsaNGwOpT8F98cUXnDhxgpo1a/LKK69kecmENGazmbi4uHTJWtoLcT09PTGbzenWAs9N0dHRJCcn37fjy4PFYDAQqCcaJBt07Uh26LqR7NB1I/fi4uKCv78/cH/v8/9NSkpKhse2WCyYzWZrccnJyclaPPqnc+fO8dBDDwGp7xe6cwlsi8Vyz5k9DxrlTA8G/f1tPxpr+9J424/G2r403vajsbYvRx/vO3OmB1WOModFixZZXzgLsGbNGn788UecnZ358ccf+fbbb7MfmJNThk/2GY1G6/IO9zPxERERERFxVPfzPv/f3K0QZTAYcHZ2xmg04uLigrOz810LP2nFIkj/vlRHKhaBciYREREREcm8HGUPV65coVy5ckDqzJ8tW7bwzDPPMGPGDF588UV27dqVK0GKiIiIiIj96D5fRERERETE8eSoYFSoUCESExMB2Lt3L7dv36Zt27YAlCtXjqioqJxHKCIiIiIidqX7fBEREREREcdjzMnOtWrV4ptvviEuLo7169fzyCOPUKxYMQCuXbuGq6trrgQpIiIiIiL2o/t8ERERERERx5OjGUadO3cmLi6OL774gqSkJHr06GHdFhoaSsWKFXMcoIiIiIiI2Jfu80VERERERBxPjmYYBQQEMGfOHMLDwyldurT1hbIWi4VOnTrh7++fK0GKiIiIiIj96D5fRERERETE8eSoYATg7u5OpUqVMJvNXLt2DW9vb4xGIzVq1MiN+EREREREJA/oPl9ERERERMSx5LhgdPDgQVatWsWff/5JSkoK7777LlWrVuXbb7/lscce09OHIiIiIiIFkO7zRUREREREHEuO3mG0Z88epk2bRkpKCk8++aTNtrCwMNauXZuj4ERERERExP50ny8iIiIiIuJ4clQwWrNmDY899hgzZsyweREuQM2aNfnjjz9yFJyIiIiIiNif7vNFREREREQcT46WpIuMjKRz584ZbvP29ubatWs5ObyIiIiI3AcHDx5k6NChGW4bPXo0rVu3tmk7fPgwISEhXLhwgZIlSzJgwAAaNGhgj1Alj+g+X0REREREJO/t37+fXr16Zbht+vTpdOjQwabt119/ZerUqZw5c4ayZcsyatQomjVrlunz5ahg5O3tTURERIbbLl26hJubW04OD6T+h8aXX37JBx98wOTJk+nVqxcPPfSQTZ9XX32V+fPn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UFWtWlXLly/PMZ4ePXpo/vz5dj8LAQAAgFtBvl14uVTB6PDhw6pSpYq8vLxsidDJkye1fft2HTt2TJ999pkkqXHjxurXr5+2bt0qPz8/SZlVTZPJZHuSLjU1VadOncr2ziMAAAqTW10yyB1ZLBZJUs+ePdWqVStJ0pgxY/T444/r119/Vdu2bW19PT09lZ6ebjeeZrNZ3t7ehWqMs86lMJ0T4GxGo1GdOnWym8nz0Ucf6f7771etWrUkZf48+uKLLyRJI0aMUIkSJfSf//xH+/fvV5kyZdS1a1c1adJE06dP15QpUzRt2jT1799fMTEx2r17tzw8PNS7d28tWbJEH3zwgUqUKKERI0ZIkk6fPq0rV67YxfTPz8OHD9fZs2ezxf70009na8utwAQAAODKyHEcI2ucybcLL5cqGO3bt081atTQ7Nmz9ffff2vQoEGaP3++jEaj5s6dK0n6448/9OuvvyouLk6ffPKJXn75ZUnSxo0bZTabNXDgQEnSsWPHtHr16hyXcwAAoLD457Ru/H9Z7ziMiIhQaGioJCk0NFQlS5ZUenq6rU3KHMfr16/btV27dk0VK1a0ayssuG6Au+Ovv/7SnDlzJEk7d+60tVutVh06dChbArxz506NGDFCHh4eWr16taZPn661a9fq66+/1vr16xUfH68RI0bowoULevPNN20zjKTM9w7dc889+vjjjzVlyhRJ0t69e9W2bVt17drV7nsmTZqULdbJkyeratWqts//nGGUkpKifv363fmgAAAAOAE5jmOFh4dLIt8ujFyqYBQREaHPPvtMEyZM0OzZs7V7927VqFFD8fHxthe/pqamqlatWtq7d6/uvfdemc1meXl5KTIyUuPHj7c92VerVi1988032r9/vxPPCACA/BUXFyer1ersMFySp6enAgMD9fPPP9tuQq9cuaKLFy+qePHiio2NtfWtXr26tmzZom7duknKfN/I9u3b9cQTT9j1K+gMBoNCQkK4bpAjk8mk4OBgZ4dRoFSpUkUzZ87U1q1bdenSpZv2LV68uFq0aCGLxaKpU6fKYrHIx8dHAQEBGjBggG2FhRvt379fR48evelxV69ere+//96uLSkpKe8nAwAAUICR4zhGVk7p5eXllvm2O+RMLlUwqlWrlkJDQ3XgwAEZjUbVqFFD1apV088//2ybKZQ1w2jv3r2qW7eu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QECArd+QIUMUHBysdu3aadGiRUpJSdH06dM1dOhQW58ePXpIksaPH6+aNWvq9OnTWr16tY4cOaIrV64oKChIbdu21SOPPGLbZ+7cufrxxx81b948LVy4ULt27VKRIkXUpEkT9enTR15eXra+6enpWrt2rX7++WfFxcXJy8tLNWrU0MiRI219fvnlF61Zs0ZnzpyRj4+PmjRpot69e8vb2zvX8b5+/bq++eYbbd++XZcuXZKvr6/atm2rrl272vrExcVpxYoV2rt3r65du6aAgAD17NlTLVu2lCSlpqbajhEfH68iRYqoWrVq6t69uypXrpztfN999129//77OnXqlKZPn64KFSooLi5OX3zxhfbt2yez2azw8HD17dtXlSpVupXLBgAAAHAr5E3kTeRNAHD3UTACABeUnJysDz74QO3atVNkZKSWL1+ut99+W40aNVJCQoL69++vU6dOafXq1ZKkUaNG2e2/adMmWSwWPfbYYzIajdq4caM+/vhj+fj4qGnTppKks2fP6rXXXpPRaFSHDh1UunRpxcTE6Ntvv9W+ffs0ffp0+fn52Y555coVLVu2TD169JDRaFRAQIDGjBlj6z9mzBhJUvny5SVJ33//vcxms7p37y5vb29t2bJFCxcuVFBQkBo1amQX74wZM1SnTh01btxY27Zt0/fffy9fX1/17NlTUuaTedOnT9fevXvVsmVLdenSRWlpadq1a5ftGN9++60WL16sRo0a6bHHHlNcXJxWrlypq1ev6qWXXsp1rGfOnKmDBw+qR48eKl26tM6fP6/ExETb9piYGI0fP942TqGhoYqNjdW1a9ckSWlpaZowYYJOnTql9u3bKzw8XFeuXNG6dev0+uuva/z48apatardd3744Ydq2rSpHnvsMRUvXlyxsbEaO3asihYtqt69e8vT01Nr167VxIkTNWvWLLskFAAAAEAm8ibyJvImALi7KBgBgAtKSkrS6NGjVa1aNUmSt7e3Zs+erWPHjmnmzJkymUxq1qyZTp8+rT///FMWi0UeHv9/ldHk5GS99dZbMpkyf8w3bdpUw4YN04oVK2yJz6JFi5Samqr33ntPpUqVkiQ1adJE1apV05QpU7R27VpFRUXZjnn27FlNmzbN7smtunXr6pdffrH9+Ua9e/e2S5zq1q2rgQMHaseOHdkSn5YtW6pNmzaSpMaNG2vo0KH65ZdfbInPDz/8oD179qh///52T9q1atVKknTp0iV9+eWXatiwoV5++WXbdi8vL33++ec6ffq0LSH7p/3796tevXrq2LFjjts//vhjWSwWvfXWWwoKCsq2/fvvv9fx48f1wgsvqHnz5rb25s2b6/nnn9fixYs1adIku32aNm2qDh062D5PmzZNGRkZmjhxou07IiIiNHToUK1Zs0b9+vXLMTYAAADAnZE3kTeRNwHA3cU7jADABfn4+NiSHkmqWLGiJKl+/fq2ZEaSypUrJ4vFoitXrtjtHxkZadfPy8tL9evX15kzZ2Q2m2U2m7V37141bNjQlvRkqVOnjkqWLKl9+/bZtZcuXTpP0/z9/Px0/fp17d27V99//72io6Pl4eGhS5cuZevbrFkz2589PDxUqVIlXbhwwdb266+/qlixYmrXrl2O37V7926lp6erdevWSklJsf2X9YTayZMnc42zevXq2rVrl1auXKmEhAS7bRcvXtSxY8f04IMP5pj0SNIff/yhgIAAu6RHkvz9/dWgQQMdPXpUqampdtuaNGli+3NaWpr27Nmj++67T35+frbYixYtqtDQUJ04cSLX2AEAAAB3Rt5E3kTeBAB3FzOMAMAF+fr62n329PSUJLsnzyTZ1qpOT0+3a89am/tGPj4+slqtSkxMlNVqVUZGRq4384GBgXbLC0hSiRIl8nQOy5Yt0+rVq1WiRAmVL19ewcHB8vT0zPHFr/88r6JFi9qd04ULF1SqVCm7pwFvlJX4TZ06NcftFy9ezDXOF198UdHR0frmm2/09ddfq2nTpurTp48CAgJsyVdISEiu+1++fPmm42i1WpWUlKQiRYrY2m8cy8TERGVkZGjr1q3aunVrtmOULl061+8GAAAA3Bl5E3lTFvImALg7KBgBQCGUkpKSre3cuXMymUwqVqyY0tPTZTAYcnxqTcq8mQ8ODrZrMxgMt/z9u3fv1sqVK9WvXz+7JQRyurG/FT4+Prp8+fJNt0vS4MGDFRoamm17bomJlJlkDhw4UFFRUdqyZYuWLVum48eP691337Ud92bfXaxYMbun+m50+fJlGY3GbIndjQmcj4+PDAaDGjdubLdsRJaspBcAAADA3UXeZI+8CQDAknQAUAj99ttvdp8vXLigP//8U7Vr15bJZJK3t7eqV6+u33//XfHx8XZ9d+/erYsXL6pBgwa39F1ZN+Y3JlsxMTGSpNq1a9vajh07ZnvhaV7Vrl1bly5d0q+//prj9po1a0rKfCLu3nvvtfuvWrVqN018sp7c8/Hx0SOPPKIHH3xQ//vf/5SQkKCwsDCVLFlS//3vf5WcnJzj/nXq1NHly5ezxZaQkKCdO3eqTp06ticac+Lt7a1KlSrp77//VuXKlbPFn5flLAAAAADcOvIm8iYAgD1mGAFAIRQTE6Np06bpgQce0LVr17RmzRp5eHioV69etj5PPvmkXn/9dY0ZM0YdO3ZUqVKlFBMTo2+//VaVK1fOdd3rfypXrpwk6YsvvlCNGjVUqVIl2836ggUL1L59e126dEk//PBDtiUjblWnTp20fft2zZ49W0eOHFHVqlWVmJio33//XWPGjFG5cuX0wAMPaMWKFbpw4YJq1aolg8Ggv//+W0eOHNH48eNzPfaIESPUqlUrhYSEKCEhQdu3b1e5cuXk7+8vg8GgAQMG6J133tErr7yi9u3bq2TJkjp9+rRMJpO6dOmiDh062GI7duyYwsPDdfnyZa1bt05Go/GWXrwaFRWlN998U+PGjdNDDz2k4sWL68KFC/rtt9/Up08fhYeH39a4AQAAAMgdeRN5EwDAHgUjACiEevTooZiYGM2fP1/p6emqWrWqRowYofLly9v6VKxYUW+++aaWL1+u1atXKzk5WUFBQWrfvr26dOly06e7bvTQQw/pyJEj+vHHH/XLL79o3LhxqlWrlvr3769169bp/fffV6VKlfT888/rrbfeuq3z8fPz05QpU7Rs2TJt27ZNGzZsUEBAgBo3bmzr89xzzyk0NFQ//fSTfvzxR/n5+alcuXJ69NFHb3rsihUrau3atUpMTFRAQIAaNmyobt262ZaSaNSokV5//XV9/fXXWrZsmaxWq8LCwtSjRw9JmU/YTZo0SV999ZW2b9+u7777Tn5+foqIiFDPnj2zvRw3J3Xq1NHYsWO1YsUKff755/Lw8FBQUJCaNGliSywBAAAA3F3kTeRNAAB7BqvVanV2EACAu+PAgQOaOHGinnvuObVs2dLZ4QAAAACAyyFvAgAgZ7zDCAAAAAAAAAAAwM1RMAIAAAAAAAAAAHBzFIwAAAAAAAAAAADcHO8wAgAAAAAAAAAAcHPMMAIAAAAAAAAAAHBzFIwAAAAAAAAAAADcHAUjAAAAAAAAAAAAN0fBCAAAAAAAAAAAwM1RMAIAAAAAAAAAAHBzFIwAAAAAAAAAAADcHAUjAAAAAAAAAAAAN0fBCAAAAAAAAAAAwM39Py8qngHkOmfbAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 31
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:10.040483Z",
     "start_time": "2025-06-10T03:17:02.694462Z"
    }
   },
   "source": [
    "# 城市变量的二值化\n",
    "data1['is_zibo_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='成都' else 0,axis=1)\n",
    "data1['is_yantai_UserInfo2'] = data1.apply(lambda x:1 if x.UserInfo_2=='烟台' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='成都' else 0,axis=1)\n",
    "data1['is_weifang_UserInfo4'] = data1.apply(lambda x:1 if x.UserInfo_4=='潍坊' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='淄博' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='成都' else 0,axis=1)\n",
    "data1['is_shantou_UserInfo8'] = data1.apply(lambda x:1 if x.UserInfo_8=='汕头' else 0,axis=1)\n",
    "\n",
    "data1['is_zibo_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='淄博市' else 0,axis=1)\n",
    "data1['is_chengdu_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='成都市' else 0,axis=1)\n",
    "data1['is_weifang_UserInfo20'] = data1.apply(lambda x:1 if x.UserInfo_20=='潍坊市' else 0,axis=1)"
   ],
   "outputs": [],
   "execution_count": 32
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:12.601007Z",
     "start_time": "2025-06-10T03:17:11.085776Z"
    }
   },
   "source": [
    "# 将四个城市变量改成同一的格式\n",
    "data1['UserInfo_20'] = [i[:-1] if i.find('市')>0 else i[:] for i in data1.UserInfo_20]\n",
    "# 城市变更次数变量衍生\n",
    "city_df = data1[['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20']]\n",
    "city_change_cnt =[]\n",
    "for i in range(city_df.shape[0]):\n",
    "    a = list(city_df.iloc[i])\n",
    "    city_count = len(set(a))\n",
    "    city_change_cnt.append(city_count)\n",
    "data1['city_change_cnt'] = city_change_cnt\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['UserInfo_2','UserInfo_4','UserInfo_8','UserInfo_20'],axis=1)\n",
    "data1.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 168)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 33
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 微博"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:13.807086Z",
     "start_time": "2025-06-10T03:17:13.717763Z"
    }
   },
   "source": [
    "# 将字符型的nan转为众数\n",
    "for col in ['WeblogInfo_19','WeblogInfo_20','WeblogInfo_21']:\n",
    "    data1 = data1.replace({col:{'nan':np.nan}})\n",
    "# 将缺失填充为众数\n",
    "for col in ['WeblogInfo_19','WeblogInfo_20','WeblogInfo_21']:\n",
    "    data1[col] = data1[col].fillna(data1[col].mode()[0])"
   ],
   "outputs": [],
   "execution_count": 34
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:15.074536Z",
     "start_time": "2025-06-10T03:17:15.048964Z"
    }
   },
   "source": [
    "# 微博变量的哑变量处理\n",
    "data1['WeblogInfo_19'] = ['WeblogInfo_19_'+s for s in data1.WeblogInfo_19]\n",
    "data1['WeblogInfo_21'] = ['WeblogInfo_21_'+s for s in data1.WeblogInfo_21]"
   ],
   "outputs": [],
   "execution_count": 35
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:17:16.223952Z",
     "start_time": "2025-06-10T03:17:16.153281Z"
    }
   },
   "source": [
    "for col in ['WeblogInfo_19','WeblogInfo_21']:\n",
    "    dummy_df = pd.get_dummies(data1[col])\n",
    "    data1 = pd.concat([data1,dummy_df],axis=1)\n",
    "# 删除原变量\n",
    "data1 = data1.drop(['WeblogInfo_19','WeblogInfo_21','WeblogInfo_20'],axis=1)\n",
    "data1.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49701, 176)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 36
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数值型变量 "
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:24.071427Z",
     "start_time": "2025-06-10T03:22:22.448641Z"
    }
   },
   "source": [
    "# 数值型变量的缺失率分布\n",
    "import missingno\n",
    "num_col = list(var_info2[var_info2['变量类型'].isin(['int64', 'float64'])].变量名称)\n",
    "missingno.bar(data1.loc[:,num_col])"
   ],
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "The number of FixedLocator locations (0), usually from a call to set_ticks, does not match the number of labels (136).",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[40], line 4\u001B[0m\n\u001B[0;32m      2\u001B[0m \u001B[38;5;28;01mimport\u001B[39;00m \u001B[38;5;21;01mmissingno\u001B[39;00m\n\u001B[0;32m      3\u001B[0m num_col \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mlist\u001B[39m(var_info2[var_info2[\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m变量类型\u001B[39m\u001B[38;5;124m'\u001B[39m]\u001B[38;5;241m.\u001B[39misin([\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mint64\u001B[39m\u001B[38;5;124m'\u001B[39m, \u001B[38;5;124m'\u001B[39m\u001B[38;5;124mfloat64\u001B[39m\u001B[38;5;124m'\u001B[39m])]\u001B[38;5;241m.\u001B[39m变量名称)\n\u001B[1;32m----> 4\u001B[0m missingno\u001B[38;5;241m.\u001B[39mbar(data1\u001B[38;5;241m.\u001B[39mloc[:,num_col])\n",
      "File \u001B[1;32mF:\\lqq\\Lib\\site-packages\\missingno\\missingno.py:266\u001B[0m, in \u001B[0;36mbar\u001B[1;34m(df, figsize, fontsize, labels, log, color, inline, filter, n, p, sort, ax)\u001B[0m\n\u001B[0;32m    264\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xticks(ax1\u001B[38;5;241m.\u001B[39mget_xticks())\n\u001B[0;32m    265\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xlim(ax1\u001B[38;5;241m.\u001B[39mget_xlim())\n\u001B[1;32m--> 266\u001B[0m ax3\u001B[38;5;241m.\u001B[39mset_xticklabels(nullity_counts\u001B[38;5;241m.\u001B[39mvalues, fontsize\u001B[38;5;241m=\u001B[39mfontsize, rotation\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m45\u001B[39m, ha\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mleft\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[0;32m    267\u001B[0m ax3\u001B[38;5;241m.\u001B[39mgrid(\u001B[38;5;28;01mFalse\u001B[39;00m)\n\u001B[0;32m    269\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m ax \u001B[38;5;129;01min\u001B[39;00m axes:\n",
      "File \u001B[1;32mF:\\lqq\\Lib\\site-packages\\matplotlib\\axes\\_base.py:73\u001B[0m, in \u001B[0;36m_axis_method_wrapper.__set_name__.<locals>.wrapper\u001B[1;34m(self, *args, **kwargs)\u001B[0m\n\u001B[0;32m     72\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mwrapper\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs):\n\u001B[1;32m---> 73\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m get_method(\u001B[38;5;28mself\u001B[39m)(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mF:\\lqq\\Lib\\site-packages\\matplotlib\\_api\\deprecation.py:297\u001B[0m, in \u001B[0;36mrename_parameter.<locals>.wrapper\u001B[1;34m(*args, **kwargs)\u001B[0m\n\u001B[0;32m    292\u001B[0m     warn_deprecated(\n\u001B[0;32m    293\u001B[0m         since, message\u001B[38;5;241m=\u001B[39m\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mold\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m parameter of \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mfunc\u001B[38;5;241m.\u001B[39m\u001B[38;5;18m__name__\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m() \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m    294\u001B[0m         \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mhas been renamed \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mnew\u001B[38;5;132;01m!r}\u001B[39;00m\u001B[38;5;124m since Matplotlib \u001B[39m\u001B[38;5;132;01m{\u001B[39;00msince\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m; support \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m    295\u001B[0m         \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mfor the old name will be dropped %(removal)s.\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m    296\u001B[0m     kwargs[new] \u001B[38;5;241m=\u001B[39m kwargs\u001B[38;5;241m.\u001B[39mpop(old)\n\u001B[1;32m--> 297\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m func(\u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n",
      "File \u001B[1;32mF:\\lqq\\Lib\\site-packages\\matplotlib\\axis.py:2025\u001B[0m, in \u001B[0;36mAxis.set_ticklabels\u001B[1;34m(self, labels, minor, fontdict, **kwargs)\u001B[0m\n\u001B[0;32m   2021\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(locator, mticker\u001B[38;5;241m.\u001B[39mFixedLocator):\n\u001B[0;32m   2022\u001B[0m     \u001B[38;5;66;03m# Passing [] as a list of labels is often used as a way to\u001B[39;00m\n\u001B[0;32m   2023\u001B[0m     \u001B[38;5;66;03m# remove all tick labels, so only error for > 0 labels\u001B[39;00m\n\u001B[0;32m   2024\u001B[0m     \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs) \u001B[38;5;241m!=\u001B[39m \u001B[38;5;28mlen\u001B[39m(labels) \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28mlen\u001B[39m(labels) \u001B[38;5;241m!=\u001B[39m \u001B[38;5;241m0\u001B[39m:\n\u001B[1;32m-> 2025\u001B[0m         \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[0;32m   2026\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe number of FixedLocator locations\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2027\u001B[0m             \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m (\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m), usually from a call to\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2028\u001B[0m             \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m set_ticks, does not match\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[0;32m   2029\u001B[0m             \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m the number of labels (\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mlen\u001B[39m(labels)\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m).\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m   2030\u001B[0m     tickd \u001B[38;5;241m=\u001B[39m {loc: lab \u001B[38;5;28;01mfor\u001B[39;00m loc, lab \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mzip\u001B[39m(locator\u001B[38;5;241m.\u001B[39mlocs, labels)}\n\u001B[0;32m   2031\u001B[0m     func \u001B[38;5;241m=\u001B[39m functools\u001B[38;5;241m.\u001B[39mpartial(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_format_with_dict, tickd)\n",
      "\u001B[1;31mValueError\u001B[0m: The number of FixedLocator locations (0), usually from a call to set_ticks, does not match the number of labels (136)."
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2400x1000 with 2 Axes>"
      ],
      "image/png": "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AACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKGJiO6Hnn38+K1euzAMPPJAtW7akq6sr8+fPz+WXX565c+ce8Xn6+/vzjW98I/fcc082bdqUcePG5Ywzzshb3/rWLFy4sJ1qAAAAAAAAAGNWywPwtm3bcsMNN2Tz5s05/vjjM3fu3Dz11FN58MEHs3bt2lx33XW54IILDnuevXv35vOf/3zWrVuXSZMm5ayzzsqOHTvy6KOP5tFHH83PfvazXHnllW09KQAAAAAAAICxqOUB+JZbbsnmzZtz4YUX5pprrklHR0f6+/uzYsWKrFq1KrfddlvOOeecTJkyZcjzrFy5MuvWrctpp52WT3ziEzn55JOTJN///vfzhS98IXfccUcuuOCCnH322e09MwAAAAAAAIAxpqXPAH744Yfz0EMPZerUqVm8eHE6OjpePMn48bnyyiszY8aMbN++Pffee++Q59m9e3fuuOOOJMnVV1+9f/xNku7u7v1v/7xq1aqWngwAAAAAAADAWNbSAHz//fcnSRYsWJDJkycfcGzChAnp7u5Okqxbt27I86xfvz47d+7MzJkzM3/+/IOO7xuA169fn4GBgVYqAgAAAAAAAIxZLQ3APT09SZJ58+YNenzOnDlJkieeeKKR8+zcuTNbt25tpSIAAAAAAADAmNXSAPzkk08mSaZPnz7o8X1v5Xy40fZw5znuuOP2X2FsAAYAAAAAAAA4MhNbufOOHTuS5KC3f96nq6srSbJ3797s2bMnEycOfvrDnWffuXbu3Jldu3a1UjGTJk3a/79f+9rXDnqf448/fsjHHs6cjmOn46FyOuqoY72Oh8vpqKOOzeR01FHHeh0Pl9NRRx2byemoo471Oh4up6OOOjaT01FHHet1PFxupHX89R10KOMGWviQ3Xe9613p7+/PzTffnDPPPPOg408++WSuvfbaJMntt9+eCRMmDHqeT3/60/nRj36U973vfXn7298+6H2uvvrqbNu2LZ/85Cfz6le/+kgrAgAAAAAAAIxZLb0FdGdnZ5Kkr69v0OP7rtbt6Og45Ph7JOf59XNNmTKllYoAAAAAAAAAY1ZLA/BJJ52UJNmyZcugx/fdPmPGjCHPc+KJJyY59Of77ty5c//bRB/uXAAAAAAAAAC8qKUBeNasWUmSjRs3Dnq8p6cnSTJ79uwhz7Pv7aP33f9Q55k+fXqOP/74VioCAAAAAAAAjFktDcDnn39+kuS+++7Lnj17DjjW39+f1atXJ0m6u7uHPM95552XcePGZePGjXniiScOOv7d7343SbJgwYJW6gEAAAAAAACMaS0NwN3d3TnllFOydevWLF++fP8I3N/fnxUrVqS3tzdz587Nueeeuz+zYcOGXH/99bnrrrv233byySenu7s7AwMDufXWW/Pss8/uP7Z69ercc889mTx5ci699NKX+PQAAAAAAAAAxo5xAwMDA60EHnnkkdx4443p6+vLy172spx++unp7e3Ntm3bMm3atPzVX/1VTjnllP33/+u//uusXbs2XV1dWbFixf7bn3322dxwww3p7e1NZ2dnzjrrrGzfvj2PP/54Jk6cmI997GM577zzmnumAAAAAAAAAMW1PAAnyS9/+ct89atfzYYNG7Jjx45MmzYtr33ta3PFFVdk6tSpB9z33nvvzfLly3PxxRfnT//0Tw84tmPHjvznf/5n7r///jz99NM57rjjcs455+SKK67IGWec8dKeGQAAAAAAAMAY09YADAAAAAAAAMDI09JnAAMAAAAAAAAwchmAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgCAMwAAAAAAAAQBEGYAAAAAAAAIAiDMAAAAAAAAAARRiAAQAAAAAAAIowAAMAAAAAAAAUYQAGAAAAAAAAKMIADAAAAAAAAFCEARgAAAAAAACgiP8PCX7xR7DvYPYAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 40
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:32.514812Z",
     "start_time": "2025-06-10T03:22:32.044805Z"
    }
   },
   "source": [
    "# 数值型变量的描述性分析\n",
    "num_desc = data1.loc[:,num_col].describe().T.assign(nuniq = data1.loc[:,num_col].apply(lambda x:x.nunique()),\\\n",
    "                                         misssing_pct  =data1.loc[:,num_col].apply(lambda x:(len(x)-x.count())/len(x)))\\\n",
    "                              .sort_values('nuniq')\n",
    "num_desc.head(10)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "                    count      mean       std  min  25%  50%  75%  max  nuniq  \\\n",
       "UserInfo_13       18317.0  0.641426  0.479595  0.0  0.0  1.0  1.0  1.0      2   \n",
       "UserInfo_12       18317.0  0.356609  0.479011  0.0  0.0  0.0  1.0  1.0      2   \n",
       "target            29832.0  0.073143  0.260375  0.0  0.0  0.0  0.0  1.0      2   \n",
       "UserInfo_17       49701.0  1.126114  0.331981  1.0  1.0  1.0  1.0  2.0      2   \n",
       "UserInfo_6        49701.0  1.650550  0.581692  1.0  1.0  2.0  2.0  3.0      3   \n",
       "UserInfo_10       49701.0  0.310778  0.603639  0.0  0.0  0.0  0.0  2.0      3   \n",
       "UserInfo_5        49701.0  1.650530  0.583010  1.0  1.0  2.0  2.0  3.0      3   \n",
       "SocialNetwork_17  49701.0  0.253415  0.437140  0.0  0.0  0.0  1.0  3.0      4   \n",
       "WeblogInfo_2      46915.0  0.132687  0.359614  0.0  0.0  0.0  0.0  4.0      5   \n",
       "SocialNetwork_13  49701.0  0.219915  0.420269  0.0  0.0  0.0  0.0  4.0      5   \n",
       "\n",
       "                  misssing_pct  \n",
       "UserInfo_13           0.631456  \n",
       "UserInfo_12           0.631456  \n",
       "target                0.399771  \n",
       "UserInfo_17           0.000000  \n",
       "UserInfo_6            0.000000  \n",
       "UserInfo_10           0.000000  \n",
       "UserInfo_5            0.000000  \n",
       "SocialNetwork_17      0.000000  \n",
       "WeblogInfo_2          0.056055  \n",
       "SocialNetwork_13      0.000000  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "      <th>nuniq</th>\n",
       "      <th>misssing_pct</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>UserInfo_13</th>\n",
       "      <td>18317.0</td>\n",
       "      <td>0.641426</td>\n",
       "      <td>0.479595</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.631456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_12</th>\n",
       "      <td>18317.0</td>\n",
       "      <td>0.356609</td>\n",
       "      <td>0.479011</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.631456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>target</th>\n",
       "      <td>29832.0</td>\n",
       "      <td>0.073143</td>\n",
       "      <td>0.260375</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.399771</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_17</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>1.126114</td>\n",
       "      <td>0.331981</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_6</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>1.650550</td>\n",
       "      <td>0.581692</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_10</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>0.310778</td>\n",
       "      <td>0.603639</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UserInfo_5</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>1.650530</td>\n",
       "      <td>0.583010</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_17</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>0.253415</td>\n",
       "      <td>0.437140</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WeblogInfo_2</th>\n",
       "      <td>46915.0</td>\n",
       "      <td>0.132687</td>\n",
       "      <td>0.359614</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0.056055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SocialNetwork_13</th>\n",
       "      <td>49701.0</td>\n",
       "      <td>0.219915</td>\n",
       "      <td>0.420269</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 41
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 排序特征衍生 "
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:35.161344Z",
     "start_time": "2025-06-10T03:22:34.611967Z"
    }
   },
   "source": [
    "num_col2 = [col for col in num_col if col!='target']\n",
    "# 筛选出只有数值型变量的数据集\n",
    "num_data = data1.loc[:,num_col2]\n",
    "\n",
    "# 排序特征衍生\n",
    "for col in num_col2:\n",
    "    num_data['rank'+col] = num_data[col].rank(method='max')/num_data.shape[0]\n",
    "\n",
    "# 将排序特征转为单独的数据集\n",
    "rank_col = [col for col in num_data.columns if col not in num_col2]\n",
    "rank_df = num_data.loc[:,rank_col]"
   ],
   "outputs": [],
   "execution_count": 42
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### periods变量衍生 "
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:36.989260Z",
     "start_time": "2025-06-10T03:22:36.976247Z"
    }
   },
   "source": [
    "# 生成只包含periods的临时表\n",
    "periods_col = [i for i in num_col2 if i.find('Period')>0]\n",
    "periods_col2 = periods_col+['target']\n",
    "periods_data = data1.loc[:,periods_col2]"
   ],
   "outputs": [],
   "execution_count": 43
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:38.204015Z",
     "start_time": "2025-06-10T03:22:38.180962Z"
    }
   },
   "source": [
    "# 观察包含period1所有字段的数据，发现字段之间量级差异比较大，可能代表不同的含义，不适合做衍生\n",
    "periods1_col = [col for col in periods_col if col.find('Period1')>0]\n",
    "periods_data.loc[:,periods1_col].head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   ThirdParty_Info_Period1_1  ThirdParty_Info_Period1_2  \\\n",
       "0                       10.0                       47.0   \n",
       "1                        0.0                        0.0   \n",
       "2                        1.0                        2.0   \n",
       "3                        9.0                       54.0   \n",
       "4                        1.0                        5.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_3  ThirdParty_Info_Period1_4  \\\n",
       "0                      167.0                        0.0   \n",
       "1                       68.0                      105.0   \n",
       "2                       50.0                       50.0   \n",
       "3                       56.0                      125.0   \n",
       "4                       39.0                       34.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_5  ThirdParty_Info_Period1_6  \\\n",
       "0                       25.0                       65.0   \n",
       "1                       40.0                        2.0   \n",
       "2                       49.0                        0.0   \n",
       "3                       38.0                        0.0   \n",
       "4                       36.0                       73.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_7  ThirdParty_Info_Period1_8  \\\n",
       "0                       68.0                       34.0   \n",
       "1                      132.0                       39.0   \n",
       "2                       78.0                       22.0   \n",
       "3                      136.0                       45.0   \n",
       "4                        0.0                        0.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_9  ThirdParty_Info_Period1_10  \\\n",
       "0                        2.0                         1.0   \n",
       "1                        2.0                         1.0   \n",
       "2                        0.0                         0.0   \n",
       "3                        2.0                         1.0   \n",
       "4                        1.0                         1.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_11  ThirdParty_Info_Period1_12  \\\n",
       "0                        10.0                        63.0   \n",
       "1                         8.0                         0.0   \n",
       "2                         7.0                         0.0   \n",
       "3                         9.0                         0.0   \n",
       "4                         5.0                         0.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_13  ThirdParty_Info_Period1_14  \\\n",
       "0                     27489.0                         0.0   \n",
       "1                      3839.0                      9558.0   \n",
       "2                      3578.0                      5360.0   \n",
       "3                      3805.0                      9765.0   \n",
       "4                       561.0                       792.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_15  ThirdParty_Info_Period1_16  \\\n",
       "0                     18900.0                      6083.0   \n",
       "1                        49.0                      9571.0   \n",
       "2                         0.0                      4646.0   \n",
       "3                         0.0                     10461.0   \n",
       "4                      1353.0                         0.0   \n",
       "\n",
       "   ThirdParty_Info_Period1_17  \n",
       "0                      2506.0  \n",
       "1                      3777.0  \n",
       "2                      4292.0  \n",
       "3                      3109.0  \n",
       "4                         0.0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ThirdParty_Info_Period1_1</th>\n",
       "      <th>ThirdParty_Info_Period1_2</th>\n",
       "      <th>ThirdParty_Info_Period1_3</th>\n",
       "      <th>ThirdParty_Info_Period1_4</th>\n",
       "      <th>ThirdParty_Info_Period1_5</th>\n",
       "      <th>ThirdParty_Info_Period1_6</th>\n",
       "      <th>ThirdParty_Info_Period1_7</th>\n",
       "      <th>ThirdParty_Info_Period1_8</th>\n",
       "      <th>ThirdParty_Info_Period1_9</th>\n",
       "      <th>ThirdParty_Info_Period1_10</th>\n",
       "      <th>ThirdParty_Info_Period1_11</th>\n",
       "      <th>ThirdParty_Info_Period1_12</th>\n",
       "      <th>ThirdParty_Info_Period1_13</th>\n",
       "      <th>ThirdParty_Info_Period1_14</th>\n",
       "      <th>ThirdParty_Info_Period1_15</th>\n",
       "      <th>ThirdParty_Info_Period1_16</th>\n",
       "      <th>ThirdParty_Info_Period1_17</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>167.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>65.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>27489.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>18900.0</td>\n",
       "      <td>6083.0</td>\n",
       "      <td>2506.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>68.0</td>\n",
       "      <td>105.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>132.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3839.0</td>\n",
       "      <td>9558.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>9571.0</td>\n",
       "      <td>3777.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>49.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>78.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3578.0</td>\n",
       "      <td>5360.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4646.0</td>\n",
       "      <td>4292.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>56.0</td>\n",
       "      <td>125.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>136.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3805.0</td>\n",
       "      <td>9765.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10461.0</td>\n",
       "      <td>3109.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>73.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>561.0</td>\n",
       "      <td>792.0</td>\n",
       "      <td>1353.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 44
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:39.946353Z",
     "start_time": "2025-06-10T03:22:39.935066Z"
    }
   },
   "source": [
    "# 观察后缀都为1的字段，发现字段数据的量级基本一致，可以对其做min,max,avg等统计值的衍生\n",
    "period_1_col=[]\n",
    "for i in range(0,102,17):\n",
    "    col = periods_col[i]\n",
    "    period_1_col.append(col)\n",
    "periods_data.loc[:,period_1_col].head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   ThirdParty_Info_Period5_16  ThirdParty_Info_Period4_6  \\\n",
       "0                     16882.0                        1.0   \n",
       "1                     46372.0                        1.0   \n",
       "2                      6547.0                        7.0   \n",
       "3                     12078.0                        2.0   \n",
       "4                         0.0                      162.0   \n",
       "\n",
       "   ThirdParty_Info_Period6_8  ThirdParty_Info_Period6_15  \\\n",
       "0                       25.0                       199.0   \n",
       "1                        NaN                         NaN   \n",
       "2                       24.0                        51.0   \n",
       "3                       46.0                        40.0   \n",
       "4                        NaN                         NaN   \n",
       "\n",
       "   ThirdParty_Info_Period2_17  ThirdParty_Info_Period1_4  \n",
       "0                     13568.0                        0.0  \n",
       "1                      5353.0                      105.0  \n",
       "2                      5009.0                       50.0  \n",
       "3                      6430.0                      125.0  \n",
       "4                         0.0                       34.0  "
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ThirdParty_Info_Period5_16</th>\n",
       "      <th>ThirdParty_Info_Period4_6</th>\n",
       "      <th>ThirdParty_Info_Period6_8</th>\n",
       "      <th>ThirdParty_Info_Period6_15</th>\n",
       "      <th>ThirdParty_Info_Period2_17</th>\n",
       "      <th>ThirdParty_Info_Period1_4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>16882.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>25.0</td>\n",
       "      <td>199.0</td>\n",
       "      <td>13568.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>46372.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5353.0</td>\n",
       "      <td>105.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>6547.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>5009.0</td>\n",
       "      <td>50.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>12078.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>46.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>6430.0</td>\n",
       "      <td>125.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>162.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 45
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:22:42.187152Z",
     "start_time": "2025-06-10T03:22:42.182352Z"
    }
   },
   "source": [
    "p_num_col=[]\n",
    "# 将Period变量按照后缀数字存储成嵌套列表\n",
    "for i in range(0,17,1):\n",
    "    p_col=[]\n",
    "    for j in range(i,102,17):\n",
    "        col = periods_col[j]\n",
    "        p_col.append(col)\n",
    "    p_num_col.append(p_col)"
   ],
   "outputs": [],
   "execution_count": 46
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:23:58.928456Z",
     "start_time": "2025-06-10T03:22:44.766480Z"
    }
   },
   "source": [
    "# min,max,avg等统计值的衍生，并将衍生后的特征存成单独的数据集\n",
    "periods_data = periods_data.fillna(0)\n",
    "periods_fea_data=pd.DataFrame()\n",
    "for j,p_list in zip(range(1,18,1),p_num_col):\n",
    "    p_data = periods_data.loc[:,p_list]\n",
    "    period_min=[]\n",
    "    period_max=[]\n",
    "    period_avg=[]\n",
    "    for i in range(periods_data.shape[0]):\n",
    "        a = p_data.iloc[i]\n",
    "        period_min.append(np.min(a))\n",
    "        period_max.append(np.max(a))\n",
    "        period_avg.append(np.average(a))\n",
    "    periods_fea_data['periods_'+str(j)+'_min'] = period_min\n",
    "    periods_fea_data['periods_'+str(j)+'_max'] = period_max\n",
    "    periods_fea_data['periods_'+str(j)+'_avg'] = period_avg"
   ],
   "outputs": [],
   "execution_count": 47
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "------"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:25:01.891525Z",
     "start_time": "2025-06-10T03:24:49.310Z"
    }
   },
   "source": [
    "# 保存特征衍生后的数据集至本地\n",
    "data1.to_csv('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/data1_process.csv',encoding='gb18030',index=False)\n",
    "rank_df.to_csv('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/rank_feature.csv',encoding='gbk',index=False)\n",
    "periods_fea_data.to_csv('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/periods_feature.csv',encoding='gbk',index=False)"
   ],
   "outputs": [],
   "execution_count": 48
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 修改信息表"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "衍生的变量\n",
    "1.最近的修改时间距离成交时间差\n",
    "2.修改信息的总次数\n",
    "3.每种信息修改的次数\n",
    "4.按照日期修改的次数"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:25:13.914849Z",
     "start_time": "2025-06-10T03:25:13.575907Z"
    }
   },
   "source": [
    "df2 = pd.read_csv('data_input2.csv',encoding='gbk')"
   ],
   "outputs": [],
   "execution_count": 49
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:25:15.872370Z",
     "start_time": "2025-06-10T03:25:15.711335Z"
    }
   },
   "source": [
    "# 最近的修改时间距离成交时间差\n",
    "# 时间格式的转换\n",
    "df2['ListingInfo1'] = pd.to_datetime(df2['ListingInfo1'])\n",
    "df2['UserupdateInfo2'] = pd.to_datetime(df2['UserupdateInfo2'])"
   ],
   "outputs": [],
   "execution_count": 50
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:25:18.397672Z",
     "start_time": "2025-06-10T03:25:18.053069Z"
    }
   },
   "source": [
    "# 计算时间差\n",
    "time_span = df2.groupby('Idx',as_index=False).agg({'UserupdateInfo2':np.max,'ListingInfo1':np.max})\n",
    "time_span['update_timespan'] = time_span['ListingInfo1']-time_span['UserupdateInfo2']\n",
    "time_span['update_timespan'] = time_span['update_timespan'].map(lambda x:str(x))\n",
    "time_span['update_timespan'] = time_span['update_timespan'].map(lambda x:int(x[:x.find('d')]))\n",
    "time_span = time_span[['Idx','update_timespan']]"
   ],
   "outputs": [],
   "execution_count": 51
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:26:07.370487Z",
     "start_time": "2025-06-10T03:25:20.302308Z"
    }
   },
   "source": [
    "# 将UserupdateInfo1里的字符改为小写形式\n",
    "df2['UserupdateInfo1'] = df2.UserupdateInfo1.map(lambda x:x.lower())\n",
    "# 根据Idx计算UserupdateInfo2的非重复计数\n",
    "group = df2.groupby(['Idx','UserupdateInfo1'],as_index=False).agg({'UserupdateInfo2':pd.Series.nunique})"
   ],
   "outputs": [],
   "execution_count": 52
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:27:54.249820Z",
     "start_time": "2025-06-10T03:26:11.947192Z"
    }
   },
   "source": [
    "# 每种信息修改的次数的衍生\n",
    "user_df_list=[]\n",
    "for idx in group.Idx.unique():\n",
    "    user_df  = group[group.Idx==idx]\n",
    "    change_cate = list(user_df.UserupdateInfo1)\n",
    "    change_cnt = list(user_df.UserupdateInfo2)\n",
    "    user_col  = ['Idx']+change_cate\n",
    "    user_value = [user_df.iloc[0]['Idx']]+change_cnt\n",
    "    user_df2 = pd.DataFrame(np.array(user_value).reshape(1,len(user_value)),columns=user_col)\n",
    "    user_df_list.append(user_df2)\n",
    "cate_change_df = pd.concat(user_df_list,axis=0)\n",
    "cate_change_df.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  _educationid  _hasbuycar  _idnumber  _lastupdatedate  \\\n",
       "0    3           1.0         1.0        1.0              1.0   \n",
       "0    4           1.0         1.0        1.0              1.0   \n",
       "0    5           1.0         1.0        1.0              1.0   \n",
       "0    8           1.0         1.0        1.0              1.0   \n",
       "0   11           1.0         1.0        1.0              1.0   \n",
       "\n",
       "   _marriagestatusid  _mobilephone  _qq  _realname  _residencephone  ...  \\\n",
       "0                1.0           1.0  1.0        1.0              1.0  ...   \n",
       "0                1.0           3.0  1.0        1.0              1.0  ...   \n",
       "0                1.0           1.0  1.0        1.0              1.0  ...   \n",
       "0                1.0           2.0  1.0        1.0              1.0  ...   \n",
       "0                1.0           3.0  1.0        2.0              1.0  ...   \n",
       "\n",
       "   _creationdate  _orderid  _userid  _bussinessaddress  _hasbusinesslicense  \\\n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "0            NaN       NaN      NaN                NaN                  NaN   \n",
       "\n",
       "   _cityid  _districtid  _provinceid  _hassborgjj  _position  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "0      NaN          NaN          NaN          NaN        NaN  \n",
       "\n",
       "[5 rows x 56 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>_educationid</th>\n",
       "      <th>_hasbuycar</th>\n",
       "      <th>_idnumber</th>\n",
       "      <th>_lastupdatedate</th>\n",
       "      <th>_marriagestatusid</th>\n",
       "      <th>_mobilephone</th>\n",
       "      <th>_qq</th>\n",
       "      <th>_realname</th>\n",
       "      <th>_residencephone</th>\n",
       "      <th>...</th>\n",
       "      <th>_creationdate</th>\n",
       "      <th>_orderid</th>\n",
       "      <th>_userid</th>\n",
       "      <th>_bussinessaddress</th>\n",
       "      <th>_hasbusinesslicense</th>\n",
       "      <th>_cityid</th>\n",
       "      <th>_districtid</th>\n",
       "      <th>_provinceid</th>\n",
       "      <th>_hassborgjj</th>\n",
       "      <th>_position</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>8</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 56 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 53
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:27:59.248566Z",
     "start_time": "2025-06-10T03:27:59.228279Z"
    }
   },
   "source": [
    "# 将cate_change_df里的空值填为0\n",
    "cate_change_df = cate_change_df.fillna(0)\n",
    "cate_change_df.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(49993, 56)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 54
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:06.673573Z",
     "start_time": "2025-06-10T03:28:00.740185Z"
    }
   },
   "source": [
    "# 修改信息的总次数，按照日期修改的次数的衍生\n",
    "update_cnt = df2.groupby('Idx',as_index=False).agg({'UserupdateInfo2':pd.Series.nunique,\n",
    "                                                         'ListingInfo1':pd.Series.count}).\\\n",
    "                      rename(columns={'UserupdateInfo2':'update_time_cnt',\n",
    "                                      'ListingInfo1':'update_all_cnt'})\n",
    "update_cnt.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  update_time_cnt  update_all_cnt\n",
       "0    3                1              13\n",
       "1    4                3              17\n",
       "2    5                1              13\n",
       "3    8                2              14\n",
       "4   11                4              17"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>update_time_cnt</th>\n",
       "      <th>update_all_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 55
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:08.445550Z",
     "start_time": "2025-06-10T03:28:08.381260Z"
    }
   },
   "source": [
    "# 将三个衍生特征的临时表进行关联\n",
    "update_info = pd.merge(time_span,cate_change_df,on='Idx',how='left')\n",
    "update_info = pd.merge(update_info,update_cnt,on='Idx',how='left')\n",
    "update_info.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  update_timespan  _educationid  _hasbuycar  _idnumber  _lastupdatedate  \\\n",
       "0    3               67           1.0         1.0        1.0              1.0   \n",
       "1    4                0           1.0         1.0        1.0              1.0   \n",
       "2    5               14           1.0         1.0        1.0              1.0   \n",
       "3    8                2           1.0         1.0        1.0              1.0   \n",
       "4   11                0           1.0         1.0        1.0              1.0   \n",
       "\n",
       "   _marriagestatusid  _mobilephone  _qq  _realname  ...  _userid  \\\n",
       "0                1.0           1.0  1.0        1.0  ...      0.0   \n",
       "1                1.0           3.0  1.0        1.0  ...      0.0   \n",
       "2                1.0           1.0  1.0        1.0  ...      0.0   \n",
       "3                1.0           2.0  1.0        1.0  ...      0.0   \n",
       "4                1.0           3.0  1.0        2.0  ...      0.0   \n",
       "\n",
       "   _bussinessaddress  _hasbusinesslicense  _cityid  _districtid  _provinceid  \\\n",
       "0                0.0                  0.0      0.0          0.0          0.0   \n",
       "1                0.0                  0.0      0.0          0.0          0.0   \n",
       "2                0.0                  0.0      0.0          0.0          0.0   \n",
       "3                0.0                  0.0      0.0          0.0          0.0   \n",
       "4                0.0                  0.0      0.0          0.0          0.0   \n",
       "\n",
       "   _hassborgjj  _position  update_time_cnt  update_all_cnt  \n",
       "0          0.0        0.0                1              13  \n",
       "1          0.0        0.0                3              17  \n",
       "2          0.0        0.0                1              13  \n",
       "3          0.0        0.0                2              14  \n",
       "4          0.0        0.0                4              17  \n",
       "\n",
       "[5 rows x 59 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>update_timespan</th>\n",
       "      <th>_educationid</th>\n",
       "      <th>_hasbuycar</th>\n",
       "      <th>_idnumber</th>\n",
       "      <th>_lastupdatedate</th>\n",
       "      <th>_marriagestatusid</th>\n",
       "      <th>_mobilephone</th>\n",
       "      <th>_qq</th>\n",
       "      <th>_realname</th>\n",
       "      <th>...</th>\n",
       "      <th>_userid</th>\n",
       "      <th>_bussinessaddress</th>\n",
       "      <th>_hasbusinesslicense</th>\n",
       "      <th>_cityid</th>\n",
       "      <th>_districtid</th>\n",
       "      <th>_provinceid</th>\n",
       "      <th>_hassborgjj</th>\n",
       "      <th>_position</th>\n",
       "      <th>update_time_cnt</th>\n",
       "      <th>update_all_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>67</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>14</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 59 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 56
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:24.009992Z",
     "start_time": "2025-06-10T03:28:22.646514Z"
    }
   },
   "source": [
    "# 保存数据至本地\n",
    "update_info.to_csv('F:/安装包/PPD-First-Round-Data-Updated/PPD-First-Round-Data-Update/update_feature.csv',encoding='gbk',index=False)"
   ],
   "outputs": [],
   "execution_count": 57
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#  登录信息表"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "衍生的变量\n",
    "1.累计登录次数\n",
    "2.登录时间的平均间隔\n",
    "3.最近一次的登录时间距离成交时间差"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:27.198124Z",
     "start_time": "2025-06-10T03:28:26.725779Z"
    }
   },
   "source": [
    "df3 = pd.read_csv('data_input3.csv',encoding='gb18030')"
   ],
   "outputs": [],
   "execution_count": 58
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:28.532950Z",
     "start_time": "2025-06-10T03:28:28.470828Z"
    }
   },
   "source": [
    "# 累计登录次数\n",
    "log_cnt = df3.groupby('Idx',as_index=False).LogInfo3.count().rename(columns={'LogInfo3':'log_cnt'})\n",
    "log_cnt.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_cnt\n",
       "0    3       26\n",
       "1    4       11\n",
       "2    5       11\n",
       "3    8      125\n",
       "4   11       30"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 59
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:28:30.710156Z",
     "start_time": "2025-06-10T03:28:30.156481Z"
    }
   },
   "source": [
    "# 最近一次的登录时间距离当前时间差\n",
    "df3['Listinginfo1']=pd.to_datetime(df3.Listinginfo1)\n",
    "df3['LogInfo3'] = pd.to_datetime(df3.LogInfo3)\n",
    "time_log_span = df3.groupby('Idx',as_index=False).agg({'Listinginfo1':np.max,\n",
    "                                                       'LogInfo3':np.max})\n",
    "time_log_span['log_timespan'] = time_log_span['Listinginfo1']-time_log_span['LogInfo3']\n",
    "time_log_span['log_timespan'] = time_log_span['log_timespan'].map(lambda x:str(x))\n",
    "time_log_span['log_timespan'] = time_log_span['log_timespan'].map(lambda x:int(x[:x.find('d')]))\n",
    "time_log_span= time_log_span[['Idx','log_timespan']]\n",
    "time_log_span.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_timespan\n",
       "0    3             4\n",
       "1    4             2\n",
       "2    5             1\n",
       "3    8             0\n",
       "4   11             0"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 60
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:29:59.288741Z",
     "start_time": "2025-06-10T03:29:59.171526Z"
    }
   },
   "source": [
    "# 登录时间的平均时间间隔\n",
    "df4  = df3.sort_values(by=['Idx','LogInfo3'],ascending=[True,True])"
   ],
   "outputs": [],
   "execution_count": 62
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T05:33:31.339325Z",
     "start_time": "2025-06-10T05:33:26.033846Z"
    }
   },
   "source": [
    "#df4['LogInfo4'] = df4.groupby('Idx')['LogInfo3'].apply(lambda x:x.shift(1))\n",
    "# 使用 transform 自动对齐索引\n",
    "df4['LogInfo4'] = df4.groupby('Idx')['LogInfo3'].transform(lambda x: x.shift(1))"
   ],
   "outputs": [],
   "execution_count": 64
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T05:33:39.396010Z",
     "start_time": "2025-06-10T05:33:33.139118Z"
    }
   },
   "source": [
    "df4['time_span'] = df4['LogInfo3']-df4['LogInfo4']\n",
    "df4['time_span'] = df4['time_span'].map(lambda x:str(x))\n",
    "df4 = df4.replace({'time_span':{'NaT':'0 days 00:00:00'}})\n",
    "df4['time_span'] = df4['time_span'].map(lambda x:int(x[:x.find('d')]))"
   ],
   "outputs": [],
   "execution_count": 65
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T05:33:41.192059Z",
     "start_time": "2025-06-10T05:33:41.152013Z"
    }
   },
   "source": [
    "avg_log_timespan = df4.groupby('Idx',as_index=False).time_span.mean().rename(columns={'time_span':'avg_log_timespan'})\n",
    "avg_log_timespan.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  avg_log_timespan\n",
       "0    3          2.423077\n",
       "1    4          0.636364\n",
       "2    5          1.181818\n",
       "3    8          0.096000\n",
       "4   11          0.266667"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>avg_log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>2.423077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>0.636364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>1.181818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>0.096000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>0.266667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 66
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T05:33:43.232511Z",
     "start_time": "2025-06-10T05:33:43.215795Z"
    }
   },
   "source": [
    "log_info = pd.merge(log_cnt,time_log_span,how='left',on='Idx')\n",
    "log_info = pd.merge(log_info,avg_log_timespan,how='left',on='Idx')\n",
    "log_info.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Idx  log_cnt  log_timespan  avg_log_timespan\n",
       "0    3       26             4          2.423077\n",
       "1    4       11             2          0.636364\n",
       "2    5       11             1          1.181818\n",
       "3    8      125             0          0.096000\n",
       "4   11       30             0          0.266667"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Idx</th>\n",
       "      <th>log_cnt</th>\n",
       "      <th>log_timespan</th>\n",
       "      <th>avg_log_timespan</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>26</td>\n",
       "      <td>4</td>\n",
       "      <td>2.423077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>0.636364</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "      <td>1.181818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>125</td>\n",
       "      <td>0</td>\n",
       "      <td>0.096000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "      <td>0.266667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 67
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T05:33:45.267006Z",
     "start_time": "2025-06-10T05:33:45.173328Z"
    }
   },
   "source": [
    "log_info.to_csv('./log_info_feature.csv',encoding='gbk',index=False)"
   ],
   "outputs": [],
   "execution_count": 68
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "205.355px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
